diff options
Diffstat (limited to 'internal/logger/logger.go')
-rw-r--r-- | internal/logger/logger.go | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/internal/logger/logger.go b/internal/logger/logger.go index a5d0264..b7ecb86 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -2,6 +2,7 @@ package logger import ( "errors" + "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -10,31 +11,44 @@ import ( var logger *zap.Logger = nil -func InitLogger(logFile string) *zap.Logger { +// Set up a new Zap logger. If `onlyFile` is true, set up the logger to work +// only on file, else prints on stdout +func InitLogger(logFile string, onlyFile bool) *zap.Logger { cfg := zap.NewProductionConfig() - cfg.OutputPaths = []string{logFile} - cfg.ErrorOutputPaths = []string{logFile} + cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder + + var core zapcore.Core - // Configure lumberjack for log rotation lumberjackLogger := &lumberjack.Logger{ Filename: logFile, - MaxSize: 100, // megabytes + MaxSize: 100, MaxBackups: 5, - MaxAge: 30, // days + MaxAge: 30, Compress: true, } - core := zapcore.NewCore( + fileCore := zapcore.NewCore( zapcore.NewJSONEncoder(cfg.EncoderConfig), - zapcore.AddSync(lumberjackLogger), // Log only to the file via lumberjack + zapcore.AddSync(lumberjackLogger), cfg.Level, ) - logger = zap.New(core) + if onlyFile { + core = fileCore + } else { + consoleCore := zapcore.NewCore( + zapcore.NewConsoleEncoder(cfg.EncoderConfig), + zapcore.Lock(os.Stdout), + cfg.Level, + ) + core = zapcore.NewTee(fileCore, consoleCore) + } + logger = zap.New(core) return logger } +// Return the global Zap logger after calling `InitLogger` method func GetLogger() (*zap.Logger, error) { if logger == nil { return nil, errors.New("You must call `InitLogger()` first.") |