日志支持不展示调用链

This commit is contained in:
2025-11-16 15:53:07 +08:00
parent 2aabbfd8b9
commit bf747e22ce
4 changed files with 26 additions and 15 deletions

View File

@@ -19,6 +19,7 @@ log:
max_backups: 7 # 最多保留的旧日志文件数量 max_backups: 7 # 最多保留的旧日志文件数量
max_age: 7 # 最多保留的旧日志文件天数 max_age: 7 # 最多保留的旧日志文件天数
compress: true # 是否压缩旧日志文件 compress: true # 是否压缩旧日志文件
enable_trace: false # 是否启用调用链追踪
# 数据库配置 # 数据库配置
database: database:

View File

@@ -20,6 +20,7 @@ log:
max_backups: 5 # 保留的旧日志文件的最大数量 max_backups: 5 # 保留的旧日志文件的最大数量
max_age: 30 # 保留的旧日志文件的最大天数 max_age: 30 # 保留的旧日志文件的最大天数
compress: false # 是否压缩/归档旧日志文件 compress: false # 是否压缩/归档旧日志文件
enable_trace: false # 是否启用调用链追踪
# 数据库配置 (PostgreSQL) # 数据库配置 (PostgreSQL)
database: database:

View File

@@ -69,14 +69,15 @@ type ServerConfig struct {
// LogConfig 代表日志配置 // LogConfig 代表日志配置
type LogConfig struct { type LogConfig struct {
Level string `yaml:"level"` Level string `yaml:"level"`
Format string `yaml:"format"` Format string `yaml:"format"`
EnableFile bool `yaml:"enable_file"` EnableFile bool `yaml:"enable_file"`
FilePath string `yaml:"file_path"` FilePath string `yaml:"file_path"`
MaxSize int `yaml:"max_size"` MaxSize int `yaml:"max_size"`
MaxBackups int `yaml:"max_backups"` MaxBackups int `yaml:"max_backups"`
MaxAge int `yaml:"max_age"` MaxAge int `yaml:"max_age"`
Compress bool `yaml:"compress"` Compress bool `yaml:"compress"`
EnableTrace bool `yaml:"enable_trace"`
} }
// DatabaseConfig 代表数据库配置 // DatabaseConfig 代表数据库配置

View File

@@ -34,6 +34,7 @@ const (
var ( var (
defaultLogger *Logger defaultLogger *Logger
logConfig config.LogConfig
once sync.Once once sync.Once
) )
@@ -73,19 +74,25 @@ func NewLogger(cfg config.LogConfig) *Logger {
// 此函数应在应用程序启动时调用一次。 // 此函数应在应用程序启动时调用一次。
func InitDefaultLogger(cfg config.LogConfig) { func InitDefaultLogger(cfg config.LogConfig) {
once.Do(func() { once.Do(func() {
logConfig = cfg
defaultLogger = NewLogger(cfg) defaultLogger = NewLogger(cfg)
}) })
} }
// GetLogger 从 Context 中提取调用链信息,并返回一个携带这些信息的 Logger 副本。 // GetLogger 从 Context 中提取调用链信息,并返回一个携带这些信息的 Logger 副本。
// 如果 Context 中没有调用链信息,则直接返回默认的 Logger。 // 如果 Context 中没有调用链信息,或配置禁用了调用链,则直接返回默认的 Logger。
func GetLogger(ctx context.Context) *Logger { func GetLogger(ctx context.Context) *Logger {
if defaultLogger == nil { if defaultLogger == nil {
// 在调用 InitDefaultLogger 之前,提供一个备用的、仅输出到控制台的 Logger // 在调用 InitDefaultLogger 之前,提供一个备用的、仅输出到控制台的 Logger
fallbackCfg := config.LogConfig{Level: "info", Format: "console"} fallbackCfg := config.LogConfig{Level: "info", Format: "console", EnableTrace: true}
return NewLogger(fallbackCfg) return NewLogger(fallbackCfg)
} }
// 如果禁用了调用链追踪,则直接返回默认 logger
if !logConfig.EnableTrace {
return defaultLogger
}
val := ctx.Value(chainKey) val := ctx.Value(chainKey)
if val == nil { if val == nil {
return defaultLogger 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), "elapsed", fmt.Sprintf("%.3fms", float32(elapsed.Nanoseconds())/1e6),
} }
// 附加调用链信息 // 仅在启用调用链时附加信息
chain := GetTraceStr(ctx) if logConfig.EnableTrace {
if chain != "" { chain := GetTraceStr(ctx)
fields = append(fields, traceKey, chain) if chain != "" {
fields = append(fields, traceKey, chain)
}
} }
if err != nil { if err != nil {
@@ -235,7 +244,6 @@ func (g *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql
// 正常情况,记录 Debug 级别的 SQL 查询 // 正常情况,记录 Debug 级别的 SQL 查询
defaultLogger.With(fields...).Debugf("[GORM] trace") defaultLogger.With(fields...).Debugf("[GORM] trace")
// --- 逻辑修复结束 ---
} }
// NewSilentLogger 创建一个不输出任何日志的 Logger 实例, 用于测试中屏蔽日志 // NewSilentLogger 创建一个不输出任何日志的 Logger 实例, 用于测试中屏蔽日志