package logger import ( "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // Logger 全局日志实例 var Logger *zap.Logger // InitializeLogger 初始化日志系统 func InitializeLogger(env string) error { var config zap.Config switch env { case "development": config = zap.NewDevelopmentConfig() config.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder case "production": config = zap.NewProductionConfig() config.Encoding = "json" config.EncoderConfig.TimeKey = "timestamp" config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder default: config = zap.NewDevelopmentConfig() } config.OutputPaths = []string{"stdout"} config.ErrorOutputPaths = []string{"stderr"} var err error Logger, err = config.Build() if err != nil { return err } zap.ReplaceGlobals(Logger) return nil } // Sync 同步日志到磁盘 func Sync() { if err := Logger.Sync(); err != nil { Logger.Error("Failed to sync logger", zap.Error(err)) } } // Info 记录信息级别的日志 func Info(msg string, fields ...zap.Field) { Logger.Info(msg, fields...) } // Warn 记录警告级别的日志 func Warn(msg string, fields ...zap.Field) { Logger.Warn(msg, fields...) } // Error 记录错误级别的日志 func Error(msg string, fields ...zap.Field) { Logger.Error(msg, fields...) } // Fatal 记录致命级别的日志 func Fatal(msg string, fields ...zap.Field) { Logger.Fatal(msg, fields...) } // Debug 记录调试级别的日志 func Debug(msg string, fields ...zap.Field) { Logger.Debug(msg, fields...) } // String 字符串字段 func String(key, value string) zap.Field { return zap.String(key, value) } // Int 整数字段 func Int(key string, value int) zap.Field { return zap.Int(key, value) } // Int64 64位整数字段 func Int64(key string, value int64) zap.Field { return zap.Int64(key, value) } // Bool 布尔字段 func Bool(key string, value bool) zap.Field { return zap.Bool(key, value) } // Float64 浮点数字段 func Float64(key string, value float64) zap.Field { return zap.Float64(key, value) } // Err 错误字段 func Err(err error) zap.Field { return zap.Error(err) } // Time 时间字段 func Time(key string, value time.Time) zap.Field { return zap.Time(key, value) } // Duration 时间间隔字段 func Duration(key string, value time.Duration) zap.Field { return zap.Duration(key, value) }