mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
107 lines
2.5 KiB
Go
107 lines
2.5 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
|
|
"github.com/foomo/keel/env"
|
|
)
|
|
|
|
var (
|
|
config zap.Config
|
|
atomicLevel = zap.NewAtomicLevelAt(zap.InfoLevel)
|
|
)
|
|
|
|
func init() {
|
|
zap.ReplaceGlobals(NewLogger(
|
|
env.Get("LOG_LEVEL", "info"),
|
|
env.Get("LOG_FORMAT", "json"),
|
|
))
|
|
}
|
|
|
|
// NewLogger return a new logger instance
|
|
func NewLogger(level, encoding string) *zap.Logger {
|
|
config = zap.NewProductionConfig()
|
|
if value, err := zapcore.ParseLevel(level); err == nil {
|
|
atomicLevel.SetLevel(value)
|
|
}
|
|
config.Encoding = encoding
|
|
config.Level = atomicLevel
|
|
config.EncoderConfig.TimeKey = "time"
|
|
config.EncoderConfig.EncodeTime = zapcore.RFC3339NanoTimeEncoder
|
|
if encoding == "console" {
|
|
config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
|
}
|
|
config.DisableCaller = env.GetBool("LOG_DISABLE_STACKTRACE", !config.Level.Enabled(zap.DebugLevel))
|
|
config.DisableStacktrace = env.GetBool("LOG_DISABLE_CALLER", !config.Level.Enabled(zap.DebugLevel))
|
|
if value, err := config.Build(); err != nil {
|
|
panic(err)
|
|
} else {
|
|
return value
|
|
}
|
|
}
|
|
|
|
// Logger return the logger instance
|
|
func Logger() *zap.Logger {
|
|
return zap.L()
|
|
}
|
|
|
|
// AtomicLevel return the configured atomic level
|
|
func AtomicLevel() zap.AtomicLevel {
|
|
return atomicLevel
|
|
}
|
|
|
|
// IsDisableCaller returns the configured disabled caller value
|
|
func IsDisableCaller() bool {
|
|
return config.DisableCaller
|
|
}
|
|
|
|
// IsDisableStacktrace returns the configured disabled stacktrace value
|
|
func IsDisableStacktrace() bool {
|
|
return config.DisableStacktrace
|
|
}
|
|
|
|
// SetDisableCaller sets the given value and re-configures the logger
|
|
func SetDisableCaller(value bool) error {
|
|
if value == config.DisableCaller {
|
|
return nil
|
|
}
|
|
config.DisableCaller = value
|
|
l, err := config.Build()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
zap.ReplaceGlobals(l)
|
|
return nil
|
|
}
|
|
|
|
// SetDisableStacktrace sets the given value and re-configures the logger
|
|
func SetDisableStacktrace(value bool) error {
|
|
if value == config.DisableStacktrace {
|
|
return nil
|
|
}
|
|
config.DisableStacktrace = value
|
|
l, err := config.Build()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
zap.ReplaceGlobals(l)
|
|
return nil
|
|
}
|
|
|
|
// Must logs a fatal error if given
|
|
func Must(l *zap.Logger, err error, msgAndArgs ...interface{}) {
|
|
if err != nil {
|
|
if l == nil {
|
|
l = Logger()
|
|
}
|
|
var msg = "Must"
|
|
if len(msgAndArgs) > 0 {
|
|
msg, msgAndArgs = fmt.Sprintf("%v", msgAndArgs[0]), msgAndArgs[1:]
|
|
}
|
|
l.WithOptions(zap.AddCallerSkip(1)).Fatal(fmt.Sprintf(msg, msgAndArgs...), FError(err))
|
|
}
|
|
}
|