gorm_log.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package logger
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/os/glog"
  6. "gorm.io/gorm/logger"
  7. "gorm.io/gorm/utils"
  8. mUtils "gxt-api-frame/library/utils"
  9. "time"
  10. )
  11. func (e *Entry) LogMode(lv logger.LogLevel) logger.Interface {
  12. switch lv {
  13. case logger.Error:
  14. e.entry.SetLevel(e.entry.GetLevel() | glog.LEVEL_ERRO)
  15. break
  16. case logger.Info:
  17. e.entry.SetLevel(e.entry.GetLevel() | glog.LEVEL_INFO)
  18. break
  19. }
  20. return e
  21. }
  22. func (e *Entry) Info(ctx context.Context, format string, args ...interface{}) {
  23. e.entry.SetCtxKeys()
  24. }
  25. func (e *Entry) Warn(ctx context.Context, format string, args ...interface{}) {
  26. e.entry.Warningf(ctx, format, args...)
  27. }
  28. func (e *Entry) Error(ctx context.Context, format string, args ...interface{}) {
  29. e.entry.Errorf(ctx, format, args...)
  30. }
  31. func (e *Entry) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) {
  32. limit := mUtils.GetConfig("gorm.slow_sql_limit").Int()
  33. if e.entry.GetLevel() > 0 {
  34. elapsed := time.Since(begin)
  35. switch {
  36. case err != nil && e.entry.GetLevel() >= glog.LEVEL_ERRO:
  37. {
  38. sql, _ := fc()
  39. e.Info(ctx, "%s\nSQL查询出错:%s\n执行SQL:%s", utils.FileWithLineNum(), err, sql)
  40. }
  41. case elapsed > time.Duration(limit)*time.Millisecond && e.entry.GetLevel() >= glog.LEVEL_WARN:
  42. sql, rows := fc()
  43. slowLog := fmt.Sprintf("执行时间 %v", elapsed)
  44. if rows == -1 {
  45. e.Warnf(ctx, "%s\n慢查询SQL:%s\n%s \n影响行数:[%s]", utils.FileWithLineNum(), sql, slowLog, "-")
  46. } else {
  47. e.Warnf(ctx, "%s\n慢查询SQL:%s\n%s\n影响行数:[%d]", utils.FileWithLineNum(), sql, slowLog, rows)
  48. }
  49. case e.entry.GetLevel() >= glog.LEVEL_INFO:
  50. sql, rows := fc()
  51. if rows == -1 {
  52. e.Infof(ctx, "执行SQL:[%s],影响行数:[%s]", sql, "-")
  53. } else {
  54. e.Infof(ctx, "执行SQL:[%s], 影响行数:[%d]", sql, rows)
  55. }
  56. }
  57. }
  58. }