日志支持不展示调用链
This commit is contained in:
@@ -19,6 +19,7 @@ log:
|
||||
max_backups: 7 # 最多保留的旧日志文件数量
|
||||
max_age: 7 # 最多保留的旧日志文件天数
|
||||
compress: true # 是否压缩旧日志文件
|
||||
enable_trace: false # 是否启用调用链追踪
|
||||
|
||||
# 数据库配置
|
||||
database:
|
||||
|
||||
@@ -20,6 +20,7 @@ log:
|
||||
max_backups: 5 # 保留的旧日志文件的最大数量
|
||||
max_age: 30 # 保留的旧日志文件的最大天数
|
||||
compress: false # 是否压缩/归档旧日志文件
|
||||
enable_trace: false # 是否启用调用链追踪
|
||||
|
||||
# 数据库配置 (PostgreSQL)
|
||||
database:
|
||||
|
||||
@@ -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 代表数据库配置
|
||||
|
||||
@@ -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 实例, 用于测试中屏蔽日志
|
||||
|
||||
Reference in New Issue
Block a user