1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package database
- import (
- "context"
- "errors"
- "github.com/zeromicro/go-zero/core/logx"
- "github.com/zeromicro/go-zero/core/service"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "strconv"
- "time"
- )
- type GormLogger struct {
- SlowThreshold time.Duration
- Mode string
- }
- func NewGormLogger(mode string) *GormLogger {
- return &GormLogger{
- SlowThreshold: 200 * time.Millisecond,
- Mode: mode,
- }
- }
- var _ logger.Interface = (*GormLogger)(nil)
- func (l *GormLogger) LogMode(lev logger.LogLevel) logger.Interface {
- return &GormLogger{}
- }
- func (l *GormLogger) Info(ctx context.Context, msg string, data ...interface{}) {
- logx.WithContext(ctx).Infof(msg, data)
- }
- func (l *GormLogger) Warn(ctx context.Context, msg string, data ...interface{}) {
- logx.WithContext(ctx).Errorf(msg, data)
- }
- func (l *GormLogger) Error(ctx context.Context, msg string, data ...interface{}) {
- logx.WithContext(ctx).Errorf(msg, data)
- }
- func (l *GormLogger) MicrosecondsStr(d time.Duration) string {
- microseconds := d.Microseconds()
- return strconv.FormatInt(microseconds, 10)
- }
- func (l *GormLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
-
- elapsed := time.Since(begin)
-
- sql, rows := fc()
-
- logFields := []logx.LogField{
- logx.Field("sql", sql),
- logx.Field("time", l.MicrosecondsStr(elapsed)),
- logx.Field("rows", rows),
- }
-
- if err != nil {
-
- if errors.Is(err, gorm.ErrRecordNotFound) {
- logx.WithContext(ctx).Infow("Database ErrRecordNotFound", logFields...)
- } else {
-
- logFields = append(logFields, logx.Field("catch error", err))
- logx.WithContext(ctx).Errorw("Database Error", logFields...)
- }
- }
-
- if l.SlowThreshold != 0 && elapsed > l.SlowThreshold {
- logx.WithContext(ctx).Sloww("Database Slow Log", logFields...)
- }
-
- if l.Mode != service.ProMode {
- logx.WithContext(ctx).Infow("Database Query", logFields...)
- }
- }
|