Files

99 lines
2.2 KiB
Go

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...)}
}