From bf747e22cea72dedfef51200f0c5a33eea76917a Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Sun, 16 Nov 2025 15:53:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=94=AF=E6=8C=81=E4=B8=8D?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E8=B0=83=E7=94=A8=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.example.yml | 1 + config.yml | 1 + internal/infra/config/config.go | 17 +++++++++-------- internal/infra/logs/logs.go | 22 +++++++++++++++------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/config.example.yml b/config.example.yml index ed4f81a..ac0bd91 100644 --- a/config.example.yml +++ b/config.example.yml @@ -19,6 +19,7 @@ log: max_backups: 7 # 最多保留的旧日志文件数量 max_age: 7 # 最多保留的旧日志文件天数 compress: true # 是否压缩旧日志文件 + enable_trace: false # 是否启用调用链追踪 # 数据库配置 database: diff --git a/config.yml b/config.yml index 728e14a..227d62a 100644 --- a/config.yml +++ b/config.yml @@ -20,6 +20,7 @@ log: max_backups: 5 # 保留的旧日志文件的最大数量 max_age: 30 # 保留的旧日志文件的最大天数 compress: false # 是否压缩/归档旧日志文件 + enable_trace: false # 是否启用调用链追踪 # 数据库配置 (PostgreSQL) database: diff --git a/internal/infra/config/config.go b/internal/infra/config/config.go index b592074..6d59998 100644 --- a/internal/infra/config/config.go +++ b/internal/infra/config/config.go @@ -69,14 +69,15 @@ type ServerConfig struct { // LogConfig 代表日志配置 type LogConfig struct { - Level string `yaml:"level"` - Format string `yaml:"format"` - EnableFile bool `yaml:"enable_file"` - FilePath string `yaml:"file_path"` - MaxSize int `yaml:"max_size"` - MaxBackups int `yaml:"max_backups"` - MaxAge int `yaml:"max_age"` - Compress bool `yaml:"compress"` + Level string `yaml:"level"` + Format string `yaml:"format"` + EnableFile bool `yaml:"enable_file"` + FilePath string `yaml:"file_path"` + MaxSize int `yaml:"max_size"` + MaxBackups int `yaml:"max_backups"` + MaxAge int `yaml:"max_age"` + Compress bool `yaml:"compress"` + EnableTrace bool `yaml:"enable_trace"` } // DatabaseConfig 代表数据库配置 diff --git a/internal/infra/logs/logs.go b/internal/infra/logs/logs.go index d44cf9d..186ad4a 100644 --- a/internal/infra/logs/logs.go +++ b/internal/infra/logs/logs.go @@ -34,6 +34,7 @@ const ( var ( defaultLogger *Logger + logConfig config.LogConfig once sync.Once ) @@ -73,19 +74,25 @@ func NewLogger(cfg config.LogConfig) *Logger { // 此函数应在应用程序启动时调用一次。 func InitDefaultLogger(cfg config.LogConfig) { once.Do(func() { + logConfig = cfg defaultLogger = NewLogger(cfg) }) } // GetLogger 从 Context 中提取调用链信息,并返回一个携带这些信息的 Logger 副本。 -// 如果 Context 中没有调用链信息,则直接返回默认的 Logger。 +// 如果 Context 中没有调用链信息,或配置禁用了调用链,则直接返回默认的 Logger。 func GetLogger(ctx context.Context) *Logger { if defaultLogger == nil { // 在调用 InitDefaultLogger 之前,提供一个备用的、仅输出到控制台的 Logger - fallbackCfg := config.LogConfig{Level: "info", Format: "console"} + fallbackCfg := config.LogConfig{Level: "info", Format: "console", EnableTrace: true} return NewLogger(fallbackCfg) } + // 如果禁用了调用链追踪,则直接返回默认 logger + if !logConfig.EnableTrace { + return defaultLogger + } + val := ctx.Value(chainKey) if val == nil { return defaultLogger @@ -211,10 +218,12 @@ func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql "elapsed", fmt.Sprintf("%.3fms", float32(elapsed.Nanoseconds())/1e6), } - // 附加调用链信息 - chain := GetTraceStr(ctx) - if chain != "" { - fields = append(fields, traceKey, chain) + // 仅在启用调用链时附加信息 + if logConfig.EnableTrace { + chain := GetTraceStr(ctx) + if chain != "" { + fields = append(fields, traceKey, chain) + } } if err != nil { @@ -235,7 +244,6 @@ func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql // 正常情况,记录 Debug 级别的 SQL 查询 defaultLogger.With(fields...).Debugf("[GORM] trace") - // --- 逻辑修复结束 --- } // NewSilentLogger 创建一个不输出任何日志的 Logger 实例, 用于测试中屏蔽日志