package utils import ( "os" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) var Logger *zap.Logger func InitLogger(debugMode bool) { customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("02/01/2006 03:04 PM")) } consoleConfig := zap.NewDevelopmentEncoderConfig() consoleConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder consoleConfig.EncodeTime = customTimeEncoder consoleEncoder := zapcore.NewConsoleEncoder(consoleConfig) fileEncoderConfig := zap.NewProductionEncoderConfig() fileEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder fileEncoder := zapcore.NewJSONEncoder(fileEncoderConfig) fileWriter := zapcore.AddSync(&lumberjack.Logger{ Filename: "logs/app.log", MaxSize: 10, MaxBackups: 3, MaxAge: 7, Compress: true, }) var consoleLevel zapcore.Level if debugMode { consoleLevel = zapcore.DebugLevel } else { consoleLevel = zapcore.InfoLevel } core := zapcore.NewTee( zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), consoleLevel), zapcore.NewCore(fileEncoder, fileWriter, zapcore.DebugLevel), ) Logger = zap.New(core, zap.AddStacktrace(zapcore.FatalLevel)) }