From ae5011fba51f868dd751a5ec8d21c0697c087d28 Mon Sep 17 00:00:00 2001 From: AI Engineer Date: Tue, 5 May 2026 18:10:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BD=93=E7=B3=BB=E9=87=8D?= =?UTF-8?q?=E6=9E=84=EF=BC=9A=E5=88=A9=E7=94=A8=20log=20=E5=8C=85=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=A0=86=E6=A0=88=E6=8D=95=E8=8E=B7=E7=89=B9=E6=80=A7?= =?UTF-8?q?=EF=BC=8C=E7=AE=80=E5=8C=96=E7=B1=BB=E5=9E=8B=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=20(by=20AI)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 ++++- Log.go | 76 +++++++++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 32 deletions(-) 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) } }