diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bf620f..7567c7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # 变更记录 - @go/db -## [1.0.5] - 2026-05-05 +## [1.0.6] - 2026-05-05 +### 优化 +- **日志体系重构**: + - 引入 `DBInfoLog` 和 `DBErrorLog` 类型化日志,分别继承 `log.InfoLog` 和 `log.ErrorLog`。 + - 利用 `log` 包的新特性实现“零手动”调用栈捕获,业务端仅需关注错误信息和 SQL 现场。 + - 进一步解耦业务字段与日志元数据。 ### 优化 - **日志自主化**: - 将数据库日志逻辑从 `log` 包迁移至 `db` 包,实现日志格式与业务逻辑的深度绑定。 diff --git a/Log.go b/Log.go index 31208d3..0015289 100644 --- a/Log.go +++ b/Log.go @@ -6,14 +6,21 @@ import ( ) type DBLog struct { - log.BaseLog - DbType string - Dsn string - Query string - QueryArgs string - UsedTime float32 - Error string - CallStacks []string + DbType string + Dsn string + Query string + QueryArgs string + UsedTime float32 +} + +type DBInfoLog struct { + log.InfoLog + DBLog +} + +type DBErrorLog struct { + log.ErrorLog + DBLog } func (dl *dbLogger) LogDB(query string, args []any, usedTime float32, err error, extra ...any) { @@ -25,31 +32,38 @@ func LogDB(logger *log.Logger, conf *Config, query string, args []any, usedTime return } - logType := log.LogTypeDb - level := log.INFO - var e string if err != nil { - logType = log.LogTypeDbError - level = log.ERROR - e = err.Error() - } - - if logger.CheckLevel(level) { - entry := log.GetEntry[DBLog]() - // 仅关注业务字段,LogType 手动赋值,基础字段由 logger.Log 自动填充 - entry.LogType = logType - entry.DbType = conf.Type - entry.Dsn = conf.Dsn() - entry.Query = query - entry.QueryArgs = cast.To[string](args) - entry.UsedTime = usedTime - if e != "" { - entry.Error = e - entry.CallStacks = logger.GetCallStacks() + if logger.CheckLevel(log.ERROR) { + entry := log.GetEntry[DBErrorLog]() + entry.LogType = log.LogTypeDbError + entry.Error = err.Error() + entry.DBLog = DBLog{ + DbType: conf.Type, + Dsn: conf.Dsn(), + Query: query, + QueryArgs: cast.To[string](args), + UsedTime: usedTime, + } + if len(extra) > 0 { + cast.FillMap(&entry.Extra, extra) + } + logger.Log(entry) } - if len(extra) > 0 { - cast.FillMap(&entry.Extra, extra) + } else { + if logger.CheckLevel(log.INFO) { + entry := log.GetEntry[DBInfoLog]() + entry.LogType = log.LogTypeDb + entry.DBLog = DBLog{ + DbType: conf.Type, + Dsn: conf.Dsn(), + Query: query, + QueryArgs: cast.To[string](args), + UsedTime: usedTime, + } + if len(extra) > 0 { + cast.FillMap(&entry.Extra, extra) + } + logger.Log(entry) } - logger.Log(entry) } }