package common_db import ( "fmt" "time" "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util" "git.shuncheng.lu/bigthing/gocommon/pkg/trace" "xorm.io/xorm/log" ) /** copy ContextLogger */ type DbLog struct { logger log.ContextLogger } func NewDbLog(logger *log.SimpleLogger) *DbLog { if logger == nil { return nil } return &DbLog{logger: log.NewLoggerAdapter(logger)} } // Debugf implements ContextLogger func (l *DbLog) Debugf(format string, v ...interface{}) { l.logger.Debugf(format, v...) } // Errorf implements ContextLogger func (l *DbLog) Errorf(format string, v ...interface{}) { l.logger.Errorf(format, v...) } // Infof implements ContextLogger func (l *DbLog) Infof(format string, v ...interface{}) { l.logger.Infof(format, v...) } // Warnf implements ContextLogger func (l *DbLog) Warnf(format string, v ...interface{}) { l.logger.Warnf(format, v...) } // Level implements ContextLogger func (l *DbLog) Level() log.LogLevel { return l.logger.Level() } // SetLevel implements ContextLogger func (l *DbLog) SetLevel(lv log.LogLevel) { l.logger.SetLevel(lv) } // ShowSQL implements ContextLogger func (l *DbLog) ShowSQL(show ...bool) { l.logger.ShowSQL(show...) } // IsShowSQL implements ContextLogger func (l *DbLog) IsShowSQL() bool { return l.logger.IsShowSQL() } // BeforeSQL implements ContextLogger func (m *DbLog) BeforeSQL(ctx log.LogContext) { m.logger.BeforeSQL(ctx) } // AfterSQL implements ContextLogger func (m *DbLog) AfterSQL(ctx log.LogContext) { m.logger.AfterSQL(ctx) if ctx.Err != nil { m.Errorf("Err: %v, SQL: %v, Args: %v, Time: %v", ctx.Err, ctx.SQL, ctx.Args, util.TimeToSeconds(ctx.ExecuteTime.Seconds())) } span := trace.GetMySqlExitSpan(ctx.Ctx) if span == nil { return } defer span.End() span.Log(time.Now(), "SQL", ctx.SQL, "Args", fmt.Sprintf("%+v", ctx.Args), "Time", util.TimeToSeconds(ctx.ExecuteTime.Seconds())) if ctx.Err != nil { span.Log(time.Now(), "ERROR", fmt.Sprintf("%v", ctx.Err)) } }