From 68a95cf3515a5a9cbd01879029c37bdb4e70384a Mon Sep 17 00:00:00 2001 From: cc Date: Sun, 23 Jun 2024 10:00:49 +0000 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E5=88=86=E4=BA=86=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=AD=89=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- log/zaplog/config.go | 89 +++++++++++++++++++++++++++++------ log/zaplog/zaplog.go | 109 +++++++++++++++++++++++++++++++------------ 2 files changed, 155 insertions(+), 43 deletions(-) diff --git a/log/zaplog/config.go b/log/zaplog/config.go index 8f55be6..b4e202c 100644 --- a/log/zaplog/config.go +++ b/log/zaplog/config.go @@ -9,19 +9,40 @@ type LogFileConfig struct { type ZapConfig struct { JsonFormat bool // 是否使用json格式,默认false - NormalLog LogFileConfig // 普通日志配置 - ErrorLog LogFileConfig // 错误日志配置 + DebugLog LogFileConfig // Debug日志配置 + InfoLog LogFileConfig // Info日志配置 + WarnLog LogFileConfig // Warn日志配置 + ErrorLog LogFileConfig // Error日志配置 + FatalLog LogFileConfig // Fatal日志配置 } var cfg_default = ZapConfig{ - NormalLog: LogFileConfig{ - Filename: "./log/normal_log", + DebugLog: LogFileConfig{ + Filename: "./log/debug", + FileSize_MB: 5, + FileBackup: 5, + FileAge_DAY: 30, + }, + InfoLog: LogFileConfig{ + Filename: "./log/info", + FileSize_MB: 5, + FileBackup: 5, + FileAge_DAY: 30, + }, + WarnLog: LogFileConfig{ + Filename: "./log/warn", FileSize_MB: 5, FileBackup: 5, FileAge_DAY: 30, }, ErrorLog: LogFileConfig{ - Filename: "./log/error_log", + Filename: "./log/error", + FileSize_MB: 5, + FileBackup: 5, + FileAge_DAY: 30, + }, + FatalLog: LogFileConfig{ + Filename: "./log/fatal", FileSize_MB: 5, FileBackup: 5, FileAge_DAY: 30, @@ -33,18 +54,46 @@ func configDefault(config ...ZapConfig) ZapConfig { return cfg_default } cfg := config[0] - if cfg.NormalLog.Filename == "" { - cfg.NormalLog.Filename = cfg_default.NormalLog.Filename + + if cfg.DebugLog.Filename == "" { + cfg.DebugLog.Filename = cfg_default.DebugLog.Filename } - if cfg.NormalLog.FileSize_MB == 0 { - cfg.NormalLog.FileSize_MB = cfg_default.NormalLog.FileSize_MB + if cfg.DebugLog.FileSize_MB == 0 { + cfg.DebugLog.FileSize_MB = cfg_default.DebugLog.FileSize_MB } - if cfg.NormalLog.FileBackup == 0 { - cfg.NormalLog.FileBackup = cfg_default.NormalLog.FileBackup + if cfg.DebugLog.FileBackup == 0 { + cfg.DebugLog.FileBackup = cfg_default.DebugLog.FileBackup } - if cfg.NormalLog.FileAge_DAY == 0 { - cfg.NormalLog.FileAge_DAY = cfg_default.NormalLog.FileAge_DAY + if cfg.DebugLog.FileAge_DAY == 0 { + cfg.DebugLog.FileAge_DAY = cfg_default.DebugLog.FileAge_DAY } + + if cfg.InfoLog.Filename == "" { + cfg.InfoLog.Filename = cfg_default.InfoLog.Filename + } + if cfg.InfoLog.FileSize_MB == 0 { + cfg.InfoLog.FileSize_MB = cfg_default.InfoLog.FileSize_MB + } + if cfg.InfoLog.FileBackup == 0 { + cfg.InfoLog.FileBackup = cfg_default.InfoLog.FileBackup + } + if cfg.InfoLog.FileAge_DAY == 0 { + cfg.InfoLog.FileAge_DAY = cfg_default.InfoLog.FileAge_DAY + } + + if cfg.WarnLog.Filename == "" { + cfg.WarnLog.Filename = cfg_default.WarnLog.Filename + } + if cfg.WarnLog.FileSize_MB == 0 { + cfg.WarnLog.FileSize_MB = cfg_default.WarnLog.FileSize_MB + } + if cfg.WarnLog.FileBackup == 0 { + cfg.WarnLog.FileBackup = cfg_default.WarnLog.FileBackup + } + if cfg.WarnLog.FileAge_DAY == 0 { + cfg.WarnLog.FileAge_DAY = cfg_default.WarnLog.FileAge_DAY + } + if cfg.ErrorLog.Filename == "" { cfg.ErrorLog.Filename = cfg_default.ErrorLog.Filename } @@ -57,5 +106,19 @@ func configDefault(config ...ZapConfig) ZapConfig { if cfg.ErrorLog.FileAge_DAY == 0 { cfg.ErrorLog.FileAge_DAY = cfg_default.ErrorLog.FileAge_DAY } + + if cfg.FatalLog.Filename == "" { + cfg.FatalLog.Filename = cfg_default.FatalLog.Filename + } + if cfg.FatalLog.FileSize_MB == 0 { + cfg.FatalLog.FileSize_MB = cfg_default.FatalLog.FileSize_MB + } + if cfg.FatalLog.FileBackup == 0 { + cfg.FatalLog.FileBackup = cfg_default.FatalLog.FileBackup + } + if cfg.FatalLog.FileAge_DAY == 0 { + cfg.FatalLog.FileAge_DAY = cfg_default.FatalLog.FileAge_DAY + } + return cfg } diff --git a/log/zaplog/zaplog.go b/log/zaplog/zaplog.go index 5c36245..d8639cf 100644 --- a/log/zaplog/zaplog.go +++ b/log/zaplog/zaplog.go @@ -11,11 +11,11 @@ import ( 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() + "]") } @@ -24,11 +24,11 @@ func textencoderConfig() zapcore.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 } @@ -42,29 +42,66 @@ func New(config ...ZapConfig) *zap.SugaredLogger { encoder = zapcore.NewJSONEncoder(jsonencoderConfig()) } - //日志级别 error 级别 - highPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { - return lev >= zap.ErrorLevel + var coreArr []zapcore.Core + + // 日志级别 Debug 级别 + DebugPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { + return lev == zap.DebugLevel }) - //info 和 debug 级别,debug 级别是最低的 - lowPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { - return lev < zap.ErrorLevel && lev >= zap.DebugLevel - }) - //info文件 writeSyncer - infoFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ - Filename: cfg.NormalLog.Filename, - MaxSize: cfg.NormalLog.FileSize_MB, - MaxBackups: cfg.NormalLog.FileBackup, - MaxAge: cfg.NormalLog.FileAge_DAY, + + // 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, }) - //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志 - infoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(infoFileWriteSyncer, - zapcore.AddSync(os.Stdout)), lowPriority) + DebugFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(DebugFileWriteSyncer, zapcore.AddSync(os.Stdout)), DebugPriority) + coreArr = append(coreArr, DebugFileCore) - //error文件writeSyncer - errorFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ + // 日志级别 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, @@ -72,13 +109,25 @@ func New(config ...ZapConfig) *zap.SugaredLogger { Compress: true, }) - //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志 - errorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(errorFileWriteSyncer, - zapcore.AddSync(os.Stdout)), highPriority) - var coreArr []zapcore.Core - coreArr = append(coreArr, infoFileCore) - coreArr = append(coreArr, errorFileCore) - //zap.AddCaller()为显示文件名和行号,可省略 - // return zap.New(zapcore.NewTee(coreArr...), zap.AddCaller()) + 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() }