diff options
author | Alan Pearce | 2024-06-30 22:12:41 +0200 |
---|---|---|
committer | Alan Pearce | 2024-06-30 22:12:41 +0200 |
commit | 61dffc8ded60655776dbc2b88cfddf282de4e05f (patch) | |
tree | d26fa7d9aa2dafa2e2077f5ebbfc46c499032af8 /log/log.go | |
parent | ddadac45203f8aa48b05e9944cc5dcddb8829f62 (diff) | |
download | x-61dffc8ded60655776dbc2b88cfddf282de4e05f.tar.lz x-61dffc8ded60655776dbc2b88cfddf282de4e05f.tar.zst x-61dffc8ded60655776dbc2b88cfddf282de4e05f.zip |
log: init
Diffstat (limited to 'log/log.go')
-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(), + } +} |