durationlogger.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package logx
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. "github.com/zeromicro/go-zero/core/timex"
  7. )
  8. // WithDuration returns a Logger which logs the given duration.
  9. func WithDuration(d time.Duration) Logger {
  10. return &durationLogger{
  11. Duration: timex.ReprOfDuration(d),
  12. }
  13. }
  14. type durationLogger logEntry
  15. func (l *durationLogger) Error(v ...interface{}) {
  16. l.err(fmt.Sprint(v...))
  17. }
  18. func (l *durationLogger) Errorf(format string, v ...interface{}) {
  19. l.err(fmt.Sprintf(format, v...))
  20. }
  21. func (l *durationLogger) Errorv(v interface{}) {
  22. l.err(v)
  23. }
  24. func (l *durationLogger) Errorw(msg string, fields ...LogField) {
  25. l.err(msg, fields...)
  26. }
  27. func (l *durationLogger) Info(v ...interface{}) {
  28. l.info(fmt.Sprint(v...))
  29. }
  30. func (l *durationLogger) Infof(format string, v ...interface{}) {
  31. l.info(fmt.Sprintf(format, v...))
  32. }
  33. func (l *durationLogger) Infov(v interface{}) {
  34. l.info(v)
  35. }
  36. func (l *durationLogger) Infow(msg string, fields ...LogField) {
  37. l.info(msg, fields...)
  38. }
  39. func (l *durationLogger) Slow(v ...interface{}) {
  40. l.slow(fmt.Sprint(v...))
  41. }
  42. func (l *durationLogger) Slowf(format string, v ...interface{}) {
  43. l.slow(fmt.Sprintf(format, v...))
  44. }
  45. func (l *durationLogger) Slowv(v interface{}) {
  46. l.slow(v)
  47. }
  48. func (l *durationLogger) Sloww(msg string, fields ...LogField) {
  49. l.slow(msg, fields...)
  50. }
  51. func (l *durationLogger) WithContext(ctx context.Context) Logger {
  52. return &contextLogger{
  53. ctx: ctx,
  54. logEntry: logEntry{
  55. Duration: l.Duration,
  56. },
  57. }
  58. }
  59. func (l *durationLogger) WithDuration(duration time.Duration) Logger {
  60. l.Duration = timex.ReprOfDuration(duration)
  61. return l
  62. }
  63. func (l *durationLogger) err(v interface{}, fields ...LogField) {
  64. if shallLog(ErrorLevel) {
  65. fields = append(fields, Field(durationKey, l.Duration))
  66. getWriter().Error(v, fields...)
  67. }
  68. }
  69. func (l *durationLogger) info(v interface{}, fields ...LogField) {
  70. if shallLog(InfoLevel) {
  71. fields = append(fields, Field(durationKey, l.Duration))
  72. getWriter().Info(v, fields...)
  73. }
  74. }
  75. func (l *durationLogger) slow(v interface{}, fields ...LogField) {
  76. if shallLog(ErrorLevel) {
  77. fields = append(fields, Field(durationKey, l.Duration))
  78. getWriter().Slow(v, fields...)
  79. }
  80. }