about summary refs log tree commit diff stats
path: root/log/log.go
diff options
context:
space:
mode:
Diffstat (limited to 'log/log.go')
-rw-r--r--log/log.go87
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(),
+	}
+}