修复bug
This commit is contained in:
@@ -41,7 +41,8 @@ var (
|
||||
// Logger 是一个封装了 zap.SugaredLogger 的日志记录器。
|
||||
// 它提供了结构化日志记录的各种方法,并实现了 io.Writer 接口以兼容 Gin。
|
||||
type Logger struct {
|
||||
*zap.SugaredLogger
|
||||
sl *zap.SugaredLogger
|
||||
traceValue string
|
||||
}
|
||||
|
||||
// NewLogger 根据提供的配置创建一个新的 Logger 实例。
|
||||
@@ -67,7 +68,7 @@ func NewLogger(cfg config.LogConfig) *Logger {
|
||||
// zap.AddCallerSkip(1) 可以向上跳一层调用栈,如果我们将 logger.Info 等方法再封装一层,这个选项会很有用
|
||||
zapLogger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
|
||||
|
||||
return &Logger{zapLogger.Sugar()}
|
||||
return &Logger{sl: zapLogger.Sugar()}
|
||||
}
|
||||
|
||||
// InitDefaultLogger 初始化包级单例的 defaultLogger。
|
||||
@@ -93,19 +94,13 @@ func GetLogger(ctx context.Context) *Logger {
|
||||
return defaultLogger
|
||||
}
|
||||
|
||||
val := ctx.Value(chainKey)
|
||||
if val == nil {
|
||||
return defaultLogger
|
||||
}
|
||||
|
||||
chain := GetTraceStr(ctx)
|
||||
if chain == "" {
|
||||
return defaultLogger
|
||||
}
|
||||
|
||||
// 使用 With 方法创建带有 traceKey 字段的 Logger 副本
|
||||
newSugaredLogger := defaultLogger.With(traceKey, chain)
|
||||
return &Logger{newSugaredLogger}
|
||||
// 返回一个新的 Logger 实例,它携带了调用链信息
|
||||
return &Logger{sl: defaultLogger.sl, traceValue: chain}
|
||||
}
|
||||
|
||||
// Trace 是构建和记录调用链的核心函数。
|
||||
@@ -218,32 +213,24 @@ func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql
|
||||
"elapsed", fmt.Sprintf("%.3fms", float32(elapsed.Nanoseconds())/1e6),
|
||||
}
|
||||
|
||||
// 仅在启用调用链时附加信息
|
||||
if logConfig.EnableTrace {
|
||||
chain := GetTraceStr(ctx)
|
||||
if chain != "" {
|
||||
fields = append(fields, traceKey, chain)
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
// 如果是 "record not found" 错误且我们配置了跳过,则直接返回
|
||||
if g.SkipErrRecordNotFound && strings.Contains(err.Error(), "record not found") {
|
||||
return
|
||||
}
|
||||
// 否则,记录为错误日志
|
||||
defaultLogger.With(fields...).Errorf("[GORM] error: %s", err)
|
||||
GetLogger(ctx).Errorw(fmt.Sprintf("[GORM] error: %s", err), fields...)
|
||||
return
|
||||
}
|
||||
|
||||
// 如果查询时间超过慢查询阈值,则记录警告
|
||||
if g.SlowThreshold != 0 && elapsed > g.SlowThreshold {
|
||||
defaultLogger.With(fields...).Warnf("[GORM] slow query")
|
||||
GetLogger(ctx).Warnw("[GORM] slow query", fields...)
|
||||
return
|
||||
}
|
||||
|
||||
// 正常情况,记录 Debug 级别的 SQL 查询
|
||||
defaultLogger.With(fields...).Debugf("[GORM] trace")
|
||||
GetLogger(ctx).Debugw("[GORM] trace", fields...)
|
||||
}
|
||||
|
||||
// NewSilentLogger 创建一个不输出任何日志的 Logger 实例, 用于测试中屏蔽日志
|
||||
@@ -255,5 +242,5 @@ func NewSilentLogger() *Logger {
|
||||
core := zapcore.NewCore(encoder, discardSyncer, zap.DebugLevel) // 设置为 DebugLevel 以确保所有日志都被处理(并丢弃)
|
||||
zapLogger := zap.New(core)
|
||||
sugaredLogger := zapLogger.Sugar()
|
||||
return &Logger{SugaredLogger: sugaredLogger}
|
||||
return &Logger{sl: sugaredLogger}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user