package logger import ( "cs-bridge/internal/config" "cs-bridge/internal/consts" "os" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) var logger *zap.Logger func Init(log config.Log) { var zapLevel zapcore.Level // 日志等级解析 switch log.Level { case "debug": zapLevel = zap.DebugLevel case "info": zapLevel = zap.InfoLevel case "warning": zapLevel = zap.WarnLevel case "error": zapLevel = zap.ErrorLevel default: zapLevel = zap.InfoLevel } // lumberjack 日志切割配置 writeSyncer := zapcore.AddSync(&lumberjack.Logger{ Filename: log.Filepath, MaxSize: log.MaxSizeMB, MaxBackups: log.Backups, MaxAge: log.MaxAgeDay, Compress: log.Compress, }) // 日志编码格式 encoderConfigColor := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "Stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.CapitalColorLevelEncoder, // 彩色等级输出(终端) // EncodeLevel: zapcore.CapitalLevelEncoder, EncodeTime: timeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "Stacktrace", LineEnding: zapcore.DefaultLineEnding, // EncodeLevel: zapcore.CapitalColorLevelEncoder, // 彩色等级输出(终端) EncodeLevel: zapcore.CapitalLevelEncoder, EncodeTime: timeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } encoderConsole := zapcore.NewConsoleEncoder(encoderConfigColor) encoderJson := zapcore.NewJSONEncoder(encoderConfig) core := zapcore.NewTee( zapcore.NewCore(encoderJson, writeSyncer, zapLevel), zapcore.NewCore(encoderConsole, zapcore.AddSync(os.Stdout), zapLevel)) logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) zap.ReplaceGlobals(logger) } // 时间格式 func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format(consts.TimeFormatDateTime)) }