Files
pig-farm-controller/internal/infra/logs/logger_methods.go

154 lines
5.6 KiB
Go
Raw Normal View History

2025-11-18 17:21:04 +08:00
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()
}