Files
pig-farm-controller/internal/infra/logs/logger_methods.go
2025-11-18 17:21:04 +08:00

154 lines
5.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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