2026-05-05 17:59:45 +08:00
|
|
|
package db
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"apigo.cc/go/cast"
|
|
|
|
|
"apigo.cc/go/log"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type DBLog struct {
|
2026-05-05 21:45:58 +08:00
|
|
|
DbType string `log:"pos:10,color:blue"`
|
|
|
|
|
Dsn string `log:"pos:11,color:gray,withoutkey:true"`
|
|
|
|
|
Query string `log:"pos:12,color:cyan"`
|
|
|
|
|
QueryArgs string `log:"pos:13,color:gray"`
|
|
|
|
|
UsedTime float32 `log:"pos:14,format:%.2fms"`
|
2026-05-05 18:10:21 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type DBInfoLog struct {
|
|
|
|
|
log.InfoLog
|
|
|
|
|
DBLog
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type DBErrorLog struct {
|
|
|
|
|
log.ErrorLog
|
|
|
|
|
DBLog
|
2026-05-05 17:59:45 +08:00
|
|
|
}
|
|
|
|
|
|
2026-05-05 21:45:58 +08:00
|
|
|
func init() {
|
|
|
|
|
log.RegisterType(log.LogTypeDb, DBInfoLog{})
|
|
|
|
|
log.RegisterType(log.LogTypeDbError, DBErrorLog{})
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-05 17:59:45 +08:00
|
|
|
func (dl *dbLogger) LogDB(query string, args []any, usedTime float32, err error, extra ...any) {
|
|
|
|
|
LogDB(dl.logger, dl.config, query, args, usedTime, err, extra...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func LogDB(logger *log.Logger, conf *Config, query string, args []any, usedTime float32, err error, extra ...any) {
|
|
|
|
|
if logger == nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
2026-05-05 18:10:21 +08:00
|
|
|
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)
|
2026-05-05 17:59:45 +08:00
|
|
|
}
|
2026-05-05 18:10:21 +08:00
|
|
|
} 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)
|
2026-05-05 17:59:45 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|