日志体系重构:利用 log 包自动堆栈捕获特性,简化类型化日志记录 (by AI)
This commit is contained in:
parent
bc3247dc4f
commit
ae5011fba5
@ -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` 包,实现日志格式与业务逻辑的深度绑定。
|
||||
|
||||
60
Log.go
60
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
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
} 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user