日志体系重构:利用 log 包自动堆栈捕获特性,简化类型化日志记录 (by AI)

This commit is contained in:
AI Engineer 2026-05-05 18:10:21 +08:00
parent bc3247dc4f
commit ae5011fba5
2 changed files with 51 additions and 32 deletions

View File

@ -1,6 +1,11 @@
# 变更记录 - @go/db # 变更记录 - @go/db
## [1.0.5] - 2026-05-05 ## [1.0.6] - 2026-05-05
### 优化
- **日志体系重构**:
- 引入 `DBInfoLog``DBErrorLog` 类型化日志,分别继承 `log.InfoLog``log.ErrorLog`
- 利用 `log` 包的新特性实现“零手动”调用栈捕获,业务端仅需关注错误信息和 SQL 现场。
- 进一步解耦业务字段与日志元数据。
### 优化 ### 优化
- **日志自主化**: - **日志自主化**:
- 将数据库日志逻辑从 `log` 包迁移至 `db` 包,实现日志格式与业务逻辑的深度绑定。 - 将数据库日志逻辑从 `log` 包迁移至 `db` 包,实现日志格式与业务逻辑的深度绑定。

58
Log.go
View File

@ -6,14 +6,21 @@ import (
) )
type DBLog struct { type DBLog struct {
log.BaseLog
DbType string DbType string
Dsn string Dsn string
Query string Query string
QueryArgs string QueryArgs string
UsedTime float32 UsedTime float32
Error string }
CallStacks []string
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) { func (dl *dbLogger) LogDB(query string, args []any, usedTime float32, err error, extra ...any) {
@ -25,27 +32,33 @@ func LogDB(logger *log.Logger, conf *Config, query string, args []any, usedTime
return return
} }
logType := log.LogTypeDb
level := log.INFO
var e string
if err != nil { if err != nil {
logType = log.LogTypeDbError if logger.CheckLevel(log.ERROR) {
level = log.ERROR entry := log.GetEntry[DBErrorLog]()
e = err.Error() 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 {
if logger.CheckLevel(level) { cast.FillMap(&entry.Extra, extra)
entry := log.GetEntry[DBLog]() }
// 仅关注业务字段LogType 手动赋值,基础字段由 logger.Log 自动填充 logger.Log(entry)
entry.LogType = logType }
entry.DbType = conf.Type } else {
entry.Dsn = conf.Dsn() if logger.CheckLevel(log.INFO) {
entry.Query = query entry := log.GetEntry[DBInfoLog]()
entry.QueryArgs = cast.To[string](args) entry.LogType = log.LogTypeDb
entry.UsedTime = usedTime entry.DBLog = DBLog{
if e != "" { DbType: conf.Type,
entry.Error = e Dsn: conf.Dsn(),
entry.CallStacks = logger.GetCallStacks() Query: query,
QueryArgs: cast.To[string](args),
UsedTime: usedTime,
} }
if len(extra) > 0 { if len(extra) > 0 {
cast.FillMap(&entry.Extra, extra) cast.FillMap(&entry.Extra, extra)
@ -53,3 +66,4 @@ func LogDB(logger *log.Logger, conf *Config, query string, args []any, usedTime
logger.Log(entry) logger.Log(entry)
} }
} }
}