70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package db
|
|
|
|
import (
|
|
"apigo.cc/go/cast"
|
|
"apigo.cc/go/log"
|
|
)
|
|
|
|
type DBLog struct {
|
|
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) {
|
|
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 {
|
|
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)
|
|
}
|
|
}
|
|
}
|