package zaplog import ( "os" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) func textencoderConfig() zapcore.EncoderConfig { encoderConfig := zap.NewProductionEncoderConfig() // 时间格式 encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("[" + t.Format("2006-01-02 15:04:05") + "]") } // 日志等级字母大写 encoderConfig.EncodeLevel = func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("[" + level.CapitalString() + "]") } return encoderConfig } func jsonencoderConfig() zapcore.EncoderConfig { encoderConfig := zap.NewProductionEncoderConfig() // 时间格式 encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("2006-01-02 15:04:05")) } // 日志等级字母大写 encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder return encoderConfig } func New(config ...ZapConfig) *zap.SugaredLogger { cfg := configDefault(config...) var encoder zapcore.Encoder encoder = zapcore.NewConsoleEncoder(textencoderConfig()) if cfg.JsonFormat { encoder = zapcore.NewJSONEncoder(jsonencoderConfig()) } var coreArr []zapcore.Core // 日志级别 Debug 级别 DebugPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.DebugLevel }) // Debug 文件 writeSyncer DebugFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: cfg.DebugLog.Filename, MaxSize: cfg.DebugLog.FileSize_MB, MaxBackups: cfg.DebugLog.FileBackup, MaxAge: cfg.DebugLog.FileAge_DAY, Compress: true, }) DebugFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(DebugFileWriteSyncer, zapcore.AddSync(os.Stdout)), DebugPriority) coreArr = append(coreArr, DebugFileCore) // 日志级别 Info 级别 InfoPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.InfoLevel }) // Info 文件 writeSyncer InfoFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: cfg.InfoLog.Filename, MaxSize: cfg.InfoLog.FileSize_MB, MaxBackups: cfg.InfoLog.FileBackup, MaxAge: cfg.InfoLog.FileAge_DAY, Compress: true, }) InfoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(InfoFileWriteSyncer, zapcore.AddSync(os.Stdout)), InfoPriority) coreArr = append(coreArr, InfoFileCore) // 日志级别 Warn 级别 WarnPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.WarnLevel }) // Warn 文件 writeSyncer WarnFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: cfg.WarnLog.Filename, MaxSize: cfg.WarnLog.FileSize_MB, MaxBackups: cfg.WarnLog.FileBackup, MaxAge: cfg.WarnLog.FileAge_DAY, Compress: true, }) WarnFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(WarnFileWriteSyncer, zapcore.AddSync(os.Stdout)), WarnPriority) coreArr = append(coreArr, WarnFileCore) // 日志级别 Error 级别 ErrorPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.ErrorLevel }) // Error 文件 writeSyncer ErrorFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: cfg.ErrorLog.Filename, MaxSize: cfg.ErrorLog.FileSize_MB, MaxBackups: cfg.ErrorLog.FileBackup, MaxAge: cfg.ErrorLog.FileAge_DAY, Compress: true, }) ErrorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(ErrorFileWriteSyncer, zapcore.AddSync(os.Stdout)), ErrorPriority) coreArr = append(coreArr, ErrorFileCore) // 日志级别 DPanic\Panic\Fatal 级别 HighPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev >= zap.DPanicLevel }) // High 文件 writeSyncer HighFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: cfg.FatalLog.Filename, MaxSize: cfg.FatalLog.FileSize_MB, MaxBackups: cfg.FatalLog.FileBackup, MaxAge: cfg.FatalLog.FileAge_DAY, Compress: true, }) HighFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(HighFileWriteSyncer, zapcore.AddSync(os.Stdout)), HighPriority) coreArr = append(coreArr, HighFileCore) return zap.New(zapcore.NewTee(coreArr...)).Sugar() }