logger.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package logger
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "git.nspix.com/golang/micro/log"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. "gorm.io/gorm/utils"
  10. "time"
  11. )
  12. type Logger struct {
  13. LogLevel logger.LogLevel
  14. SlowThreshold time.Duration
  15. }
  16. func (l Logger) LogMode(level logger.LogLevel) logger.Interface {
  17. l.LogLevel = level
  18. return l
  19. }
  20. func (l Logger) Info(ctx context.Context, s string, i ...interface{}) {
  21. log.Infof("[SQL] "+s, i...)
  22. }
  23. func (l Logger) Warn(ctx context.Context, s string, i ...interface{}) {
  24. log.Warnf("[SQL] "+s, i...)
  25. }
  26. func (l Logger) Error(ctx context.Context, s string, i ...interface{}) {
  27. log.Errorf("[SQL] "+s, i...)
  28. }
  29. func (l Logger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) {
  30. elapsed := time.Since(begin)
  31. switch {
  32. case err != nil && l.LogLevel >= logger.Error && (!errors.Is(err, gorm.ErrRecordNotFound)):
  33. sql, rows := fc()
  34. if rows == -1 {
  35. l.Error(ctx, sql)
  36. } else {
  37. l.Error(ctx, sql)
  38. }
  39. case elapsed > l.SlowThreshold && l.SlowThreshold != 0:
  40. sql, _ := fc()
  41. slowLog := fmt.Sprintf("slow sql [%s] spend %s in %s", sql, elapsed, utils.FileWithLineNum())
  42. l.Warn(ctx, slowLog)
  43. case l.LogLevel == logger.Info:
  44. sql, rows := fc()
  45. if rows == -1 {
  46. log.Debugf("[SQL] %s", sql)
  47. } else {
  48. log.Debugf("[SQL] %s -> %d", sql, rows)
  49. }
  50. }
  51. }