package logger import ( "os" "recipe-manager/config" "time" "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) type TaoLogger struct { cfg *config.ServerConfig enableDebug bool Log *zap.Logger } func (tl *TaoLogger) initConfig() *zap.Logger { enableDebugMode := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zap.InfoLevel || tl.enableDebug }) logCore := zapcore.NewTee( zapcore.NewCore(zapcore.NewJSONEncoder(zapcore.EncoderConfig{ TimeKey: "timestamp", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "message", StacktraceKey: "error", EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: zapcore.TimeEncoderOfLayout(time.DateTime), }), zapcore.AddSync(&lumberjack.Logger{ Filename: "services/logger/serverlog.log", MaxSize: 5, // megabytes MaxAge: 28, //days LocalTime: true, Compress: true, }), enableDebugMode), zapcore.NewCore(zapcore.NewConsoleEncoder(zapcore.EncoderConfig{ TimeKey: "timestamp", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "message", StacktraceKey: "error", EncodeLevel: zapcore.CapitalColorLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, }), zapcore.AddSync(os.Stdout), enableDebugMode), ) return zap.New(logCore) } func NewTaoLogger(cfg *config.ServerConfig) *TaoLogger { logger := &TaoLogger{cfg, false, nil} logger.Log = logger.initConfig() if cfg.Debug { // logger.SetLevel("DEBUG") logger.Log.Debug("Debug mode", zap.Bool("enable", cfg.Debug)) logger.enableDebug = true } return logger }