package main import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) var Logger *zap.Logger func InitLogger(env string) error { var level zapcore.Level switch env { case "prod": level = zapcore.WarnLevel case "test": level = zapcore.DebugLevel default: level = zapcore.InfoLevel } logfile := &lumberjack.Logger{ Filename: "logs/app.log", MaxSize: 100, MaxBackups: 10, MaxAge: 30, Compress: true, } encoderConfig := zapcore.EncoderConfig{ TimeKey: "ts", LevelKey: "level", MessageKey: "msg", CallerKey: "caller", EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } core := zapcore.NewCore( zapcore.NewJSONEncoder(encoderConfig), zapcore.NewMultiWriteSyncer( zapcore.AddSync(os.Stdout), zapcore.AddSync(logfile), ), level, ) Logger = zap.New(core, zap.AddCaller()) zap.ReplaceGlobals(Logger) return nil }