package logger import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // Log 是全局 SugaredLogger,由 Init 初始化。 var Log *zap.SugaredLogger // Init 初始化全局日志器。 // level: "debug", "info", "warn", "error" // format: "json" 或 "console" func Init(level, format string) { var lvl zapcore.Level switch level { case "debug": lvl = zapcore.DebugLevel case "warn": lvl = zapcore.WarnLevel case "error": lvl = zapcore.ErrorLevel default: lvl = zapcore.InfoLevel } encoderCfg := zap.NewProductionEncoderConfig() encoderCfg.TimeKey = "ts" encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder var core zapcore.Core if format == "console" { core = zapcore.NewCore( zapcore.NewConsoleEncoder(encoderCfg), zapcore.AddSync(os.Stdout), lvl, ) } else { core = zapcore.NewCore( zapcore.NewJSONEncoder(encoderCfg), zapcore.AddSync(os.Stdout), lvl, ) } logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)) Log = logger.Sugar() } // Sync 刷新缓冲区,退出前调用。 func Sync() { if Log != nil { _ = Log.Sync() } }