package utils import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) // Logger 日志管理器 type Logger struct { *zap.Logger } // NewLogger 创建日志实例 func NewLogger(level, format, output string) (*Logger, error) { // 设置日志级别 var zapLevel zapcore.Level switch level { case "debug": zapLevel = zapcore.DebugLevel case "info": zapLevel = zapcore.InfoLevel case "warn": zapLevel = zapcore.WarnLevel case "error": zapLevel = zapcore.ErrorLevel default: zapLevel = zapcore.InfoLevel } // 设置编码格式 var encoderConfig zapcore.EncoderConfig if format == "json" { encoderConfig = zap.NewProductionEncoderConfig() } else { encoderConfig = zap.NewDevelopmentEncoderConfig() } // 设置时间格式 encoderConfig.TimeKey = "timestamp" encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 创建配置 config := zap.Config{ Level: zap.NewAtomicLevelAt(zapLevel), Development: format != "json", Encoding: format, EncoderConfig: encoderConfig, OutputPaths: []string{output}, ErrorOutputPaths: []string{output}, } // 创建logger logger, err := config.Build() if err != nil { return nil, err } return &Logger{Logger: logger}, nil } // Info 记录信息日志 func (l *Logger) Info(msg string, fields ...zap.Field) { l.Logger.Info(msg, fields...) } // Debug 记录调试日志 func (l *Logger) Debug(msg string, fields ...zap.Field) { l.Logger.Debug(msg, fields...) } // Warn 记录警告日志 func (l *Logger) Warn(msg string, fields ...zap.Field) { l.Logger.Warn(msg, fields...) } // Error 记录错误日志 func (l *Logger) Error(msg string, fields ...zap.Field) { l.Logger.Error(msg, fields...) } // Fatal 记录致命错误日志 func (l *Logger) Fatal(msg string, fields ...zap.Field) { l.Logger.Fatal(msg, fields...) } // WithField 添加字段 func (l *Logger) WithField(key string, value interface{}) *Logger { return &Logger{Logger: l.Logger.With(zap.Any(key, value))} } // WithFields 添加多个字段 func (l *Logger) WithFields(fields map[string]interface{}) *Logger { zapFields := make([]zap.Field, 0, len(fields)) for k, v := range fields { zapFields = append(zapFields, zap.Any(k, v)) } return &Logger{Logger: l.Logger.With(zapFields...)} }