package logger import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) var Log *zap.Logger func InitLogger(level, format, output string) { // 1. 解析日志级别 var lvl zapcore.Level switch level { case "debug": lvl = zap.DebugLevel case "info": lvl = zap.InfoLevel case "warn": lvl = zap.WarnLevel case "error": lvl = zap.ErrorLevel default: lvl = zap.InfoLevel } // 2. 编码器配置 encoderCfg := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.CapitalColorLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } var encoder zapcore.Encoder if format == "json" { encoder = zapcore.NewJSONEncoder(encoderCfg) } else { encoder = zapcore.NewConsoleEncoder(encoderCfg) } // 3. 设置输出目标 var ws zapcore.WriteSyncer if output == "stdout" { ws = zapcore.AddSync(os.Stdout) } else { f, err := os.OpenFile(output, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { panic("无法打开日志文件: " + err.Error()) } ws = zapcore.AddSync(f) } core := zapcore.NewCore(encoder, ws, zap.NewAtomicLevelAt(lvl)) Log = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) zap.ReplaceGlobals(Log) }