154 lines
5.6 KiB
Go
154 lines
5.6 KiB
Go
package logs
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"go.uber.org/zap/zapcore"
|
||
)
|
||
|
||
// logWithTrace 是一个私有的辅助函数,用于统一处理日志记录。
|
||
// 它会检查 logger 实例中是否包含 traceValue,如果存在,则将其作为最后一个结构化字段追加。
|
||
// 然后,它根据传入的日志级别,调用底层 SugaredLogger 对应级别的 '...w' 方法。
|
||
func (l *Logger) logWithTrace(level zapcore.Level, msg string, keysAndValues ...interface{}) {
|
||
// 如果存在调用链信息,则将其追加到键值对列表的末尾
|
||
if l.traceValue != "" {
|
||
keysAndValues = append(keysAndValues, traceKey, l.traceValue)
|
||
}
|
||
|
||
// 根据级别调用相应的 '...w' 方法
|
||
switch level {
|
||
case zapcore.DebugLevel:
|
||
l.sl.Debugw(msg, keysAndValues...)
|
||
case zapcore.InfoLevel:
|
||
l.sl.Infow(msg, keysAndValues...)
|
||
case zapcore.WarnLevel:
|
||
l.sl.Warnw(msg, keysAndValues...)
|
||
case zapcore.ErrorLevel:
|
||
l.sl.Errorw(msg, keysAndValues...)
|
||
case zapcore.DPanicLevel:
|
||
l.sl.DPanicw(msg, keysAndValues...)
|
||
case zapcore.PanicLevel:
|
||
l.sl.Panicw(msg, keysAndValues...)
|
||
case zapcore.FatalLevel:
|
||
l.sl.Fatalw(msg, keysAndValues...)
|
||
}
|
||
}
|
||
|
||
// --- 重写所有日志记录方法 ---
|
||
|
||
// Debug 使用 fmt.Sprint 格式化参数并记录 Debug 级别的日志。
|
||
func (l *Logger) Debug(args ...interface{}) {
|
||
l.logWithTrace(zapcore.DebugLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Info 使用 fmt.Sprint 格式化参数并记录 Info 级别的日志。
|
||
func (l *Logger) Info(args ...interface{}) {
|
||
l.logWithTrace(zapcore.InfoLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Warn 使用 fmt.Sprint 格式化参数并记录 Warn 级别的日志。
|
||
func (l *Logger) Warn(args ...interface{}) {
|
||
l.logWithTrace(zapcore.WarnLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Error 使用 fmt.Sprint 格式化参数并记录 Error 级别的日志。
|
||
func (l *Logger) Error(args ...interface{}) {
|
||
l.logWithTrace(zapcore.ErrorLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// DPanic 使用 fmt.Sprint 格式化参数并记录 DPanic 级别的日志。
|
||
func (l *Logger) DPanic(args ...interface{}) {
|
||
l.logWithTrace(zapcore.DPanicLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Panic 使用 fmt.Sprint 格式化参数并记录 Panic 级别的日志。
|
||
func (l *Logger) Panic(args ...interface{}) {
|
||
l.logWithTrace(zapcore.PanicLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Fatal 使用 fmt.Sprint 格式化参数并记录 Fatal 级别的日志。
|
||
func (l *Logger) Fatal(args ...interface{}) {
|
||
l.logWithTrace(zapcore.FatalLevel, fmt.Sprint(args...))
|
||
}
|
||
|
||
// Debugf 使用 fmt.Sprintf 格式化模板和参数,并记录 Debug 级别的日志。
|
||
func (l *Logger) Debugf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.DebugLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Infof 使用 fmt.Sprintf 格式化模板和参数,并记录 Info 级别的日志。
|
||
func (l *Logger) Infof(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.InfoLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Warnf 使用 fmt.Sprintf 格式化模板和参数,并记录 Warn 级别的日志。
|
||
func (l *Logger) Warnf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.WarnLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Errorf 使用 fmt.Sprintf 格式化模板和参数,并记录 Error 级别的日志。
|
||
func (l *Logger) Errorf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.ErrorLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// DPanicf 使用 fmt.Sprintf 格式化模板和参数,并记录 DPanic 级别的日志。
|
||
func (l *Logger) DPanicf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.DPanicLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Panicf 使用 fmt.Sprintf 格式化模板和参数,并记录 Panic 级别的日志。
|
||
func (l *Logger) Panicf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.PanicLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Fatalf 使用 fmt.Sprintf 格式化模板和参数,并记录 Fatal 级别的日志。
|
||
func (l *Logger) Fatalf(template string, args ...interface{}) {
|
||
l.logWithTrace(zapcore.FatalLevel, fmt.Sprintf(template, args...))
|
||
}
|
||
|
||
// Debugw 记录 Debug 级别的结构化日志。
|
||
func (l *Logger) Debugw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.DebugLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// Infow 记录 Info 级别的结构化日志。
|
||
func (l *Logger) Infow(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.InfoLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// Warnw 记录 Warn 级别的结构化日志。
|
||
func (l *Logger) Warnw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.WarnLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// Errorw 记录 Error 级别的结构化日志。
|
||
func (l *Logger) Errorw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.ErrorLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// DPanicw 记录 DPanic 级别的结构化日志。
|
||
func (l *Logger) DPanicw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.DPanicLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// Panicw 记录 Panic 级别的结构化日志。
|
||
func (l *Logger) Panicw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.PanicLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// Fatalw 记录 Fatal 级别的结构化日志。
|
||
func (l *Logger) Fatalw(msg string, keysAndValues ...interface{}) {
|
||
l.logWithTrace(zapcore.FatalLevel, msg, keysAndValues...)
|
||
}
|
||
|
||
// With 在 zap 中,With 方法返回的是一个新的 SugaredLogger。
|
||
// 为了保持兼容性并继续传递 traceValue,我们需要在这里也返回一个新的 Logger 实例。
|
||
func (l *Logger) With(args ...interface{}) *Logger {
|
||
newSl := l.sl.With(args...)
|
||
return &Logger{sl: newSl, traceValue: l.traceValue}
|
||
}
|
||
|
||
func (l *Logger) Sync() error {
|
||
return l.sl.Sync()
|
||
}
|