99 lines
2.2 KiB
Go
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...)}
|
|
}
|