From e530502c7c5554b8f7c669cbde1bd2175d077a19 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Tue, 8 Apr 2025 16:27:47 +0200 Subject: Use logger with zap only --- internal/logger/logger.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 internal/logger/logger.go (limited to 'internal/logger') diff --git a/internal/logger/logger.go b/internal/logger/logger.go new file mode 100644 index 0000000..a5d0264 --- /dev/null +++ b/internal/logger/logger.go @@ -0,0 +1,43 @@ +package logger + +import ( + "errors" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "gopkg.in/natefinch/lumberjack.v2" +) + +var logger *zap.Logger = nil + +func InitLogger(logFile string) *zap.Logger { + cfg := zap.NewProductionConfig() + cfg.OutputPaths = []string{logFile} + cfg.ErrorOutputPaths = []string{logFile} + + // Configure lumberjack for log rotation + lumberjackLogger := &lumberjack.Logger{ + Filename: logFile, + MaxSize: 100, // megabytes + MaxBackups: 5, + MaxAge: 30, // days + Compress: true, + } + + core := zapcore.NewCore( + zapcore.NewJSONEncoder(cfg.EncoderConfig), + zapcore.AddSync(lumberjackLogger), // Log only to the file via lumberjack + cfg.Level, + ) + + logger = zap.New(core) + + return logger +} + +func GetLogger() (*zap.Logger, error) { + if logger == nil { + return nil, errors.New("You must call `InitLogger()` first.") + } + return logger, nil +} -- cgit v1.2.3-18-g5258