util.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package mon
  2. import (
  3. "context"
  4. "encoding/json"
  5. "strings"
  6. "time"
  7. "github.com/wuntsong-org/go-zero-plus/core/logx"
  8. "github.com/wuntsong-org/go-zero-plus/core/timex"
  9. )
  10. const mongoAddrSep = ","
  11. // FormatAddr formats mongo hosts to a string.
  12. func FormatAddr(hosts []string) string {
  13. return strings.Join(hosts, mongoAddrSep)
  14. }
  15. func logDuration(ctx context.Context, name, method string, startTime time.Duration, err error) {
  16. duration := timex.Since(startTime)
  17. logger := logx.WithContext(ctx).WithDuration(duration)
  18. if err != nil {
  19. logger.Errorf("mongo(%s) - %s - fail(%s)", name, method, err.Error())
  20. return
  21. }
  22. if logSlowMon.True() && duration > slowThreshold.Load() {
  23. logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok", name, method)
  24. } else if logMon.True() {
  25. logger.Infof("mongo(%s) - %s - ok", name, method)
  26. }
  27. }
  28. func logDurationWithDocs(ctx context.Context, name, method string, startTime time.Duration,
  29. err error, docs ...any) {
  30. duration := timex.Since(startTime)
  31. logger := logx.WithContext(ctx).WithDuration(duration)
  32. content, jerr := json.Marshal(docs)
  33. // jerr should not be non-nil, but we don't care much on this,
  34. // if non-nil, we just log without docs.
  35. if jerr != nil {
  36. if err != nil {
  37. logger.Errorf("mongo(%s) - %s - fail(%s)", name, method, err.Error())
  38. } else if logSlowMon.True() && duration > slowThreshold.Load() {
  39. logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok", name, method)
  40. } else if logMon.True() {
  41. logger.Infof("mongo(%s) - %s - ok", name, method)
  42. }
  43. return
  44. }
  45. if err != nil {
  46. logger.Errorf("mongo(%s) - %s - fail(%s) - %s", name, method, err.Error(), string(content))
  47. } else if logSlowMon.True() && duration > slowThreshold.Load() {
  48. logger.Slowf("[MONGO] mongo(%s) - slowcall - %s - ok - %s", name, method, string(content))
  49. } else if logMon.True() {
  50. logger.Infof("mongo(%s) - %s - ok - %s", name, method, string(content))
  51. }
  52. }