diff options
Diffstat (limited to 'log')
-rw-r--r-- | log/log.go | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/log/log.go b/log/log.go new file mode 100644 index 0000000..f644e6b --- /dev/null +++ b/log/log.go @@ -0,0 +1,87 @@ +package log + +import ( + "os" + + zaplogfmt "github.com/sykesm/zap-logfmt" + prettyconsole "github.com/thessem/zap-prettyconsole" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "moul.io/zapfilter" +) + +type Logger struct { + logger *zap.SugaredLogger +} + +func (l Logger) DPanic(msg string, rest ...any) { + l.logger.DPanicw(msg, rest...) +} +func (l Logger) Debug(msg string, rest ...any) { + l.logger.Debugw(msg, rest...) +} +func (l Logger) Info(msg string, rest ...any) { + l.logger.Infow(msg, rest...) +} +func (l Logger) Warn(msg string, rest ...any) { + l.logger.Warnw(msg, rest...) +} +func (l Logger) Error(msg string, rest ...any) { + l.logger.Errorw(msg, rest...) +} +func (l Logger) Panic(msg string, rest ...any) { + l.logger.Panicw(msg, rest...) +} +func (l Logger) Fatal(msg string, rest ...any) { + l.logger.Fatalw(msg, rest...) +} + +func (l Logger) Named(name string) *Logger { + return &Logger{ + logger: l.logger.Named(name), + } +} + +func (l Logger) GetLogger() *zap.Logger { + return l.logger.Desugar() +} + +func getLevelFromEnv() (zapcore.Level, error) { + if str, found := os.LookupEnv("LOG_LEVEL"); found { + l, err := zap.ParseAtomicLevel(str) + + return l.Level(), err + } + + return zap.InfoLevel, nil +} + +func Configure(isProduction bool) *Logger { + var l *zap.Logger + level, err := getLevelFromEnv() + if err != nil { + panic(err) + } + if isProduction { + cfg := zap.NewProductionEncoderConfig() + cfg.TimeKey = "" + l = zap.New(zapcore.NewCore(zaplogfmt.NewEncoder(cfg), os.Stderr, level)) + } else { + cfg := prettyconsole.NewEncoderConfig() + cfg.TimeKey = "" + var filter zapfilter.FilterFunc + if debug := os.Getenv("DEBUG"); debug != "" { + filter = zapfilter.Any(zapfilter.MinimumLevel(level), zapfilter.ByNamespaces(debug)) + } else { + filter = zapfilter.MinimumLevel(level) + } + l = zap.New(zapfilter.NewFilteringCore( + zapcore.NewCore(prettyconsole.NewEncoder(cfg), os.Stderr, zap.DebugLevel), + filter, + )) + } + + return &Logger{ + logger: l.WithOptions(zap.AddCallerSkip(1)).Sugar(), + } +} |