tracelogger_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package logx
  2. import (
  3. "context"
  4. "log"
  5. "strings"
  6. "sync/atomic"
  7. "testing"
  8. "time"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/tal-tech/go-zero/core/trace/tracespec"
  11. )
  12. const (
  13. mockTraceId = "mock-trace-id"
  14. mockSpanId = "mock-span-id"
  15. )
  16. var mock tracespec.Trace = new(mockTrace)
  17. func TestTraceLog(t *testing.T) {
  18. var buf mockWriter
  19. ctx := context.WithValue(context.Background(), tracespec.TracingKey, mock)
  20. WithContext(ctx).(*traceLogger).write(&buf, levelInfo, testlog)
  21. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  22. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  23. }
  24. func TestTraceError(t *testing.T) {
  25. var buf mockWriter
  26. ctx := context.WithValue(context.Background(), tracespec.TracingKey, mock)
  27. l := WithContext(ctx).(*traceLogger)
  28. SetLevel(InfoLevel)
  29. atomic.StoreUint32(&initialized, 1)
  30. errorLog = newLogWriter(log.New(&buf, "", flags))
  31. l.WithDuration(time.Second).Error(testlog)
  32. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  33. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  34. buf.Reset()
  35. l.WithDuration(time.Second).Errorf(testlog)
  36. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  37. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  38. }
  39. func TestTraceInfo(t *testing.T) {
  40. var buf mockWriter
  41. ctx := context.WithValue(context.Background(), tracespec.TracingKey, mock)
  42. l := WithContext(ctx).(*traceLogger)
  43. SetLevel(InfoLevel)
  44. atomic.StoreUint32(&initialized, 1)
  45. infoLog = newLogWriter(log.New(&buf, "", flags))
  46. l.WithDuration(time.Second).Info(testlog)
  47. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  48. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  49. buf.Reset()
  50. l.WithDuration(time.Second).Infof(testlog)
  51. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  52. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  53. }
  54. func TestTraceSlow(t *testing.T) {
  55. var buf mockWriter
  56. ctx := context.WithValue(context.Background(), tracespec.TracingKey, mock)
  57. l := WithContext(ctx).(*traceLogger)
  58. SetLevel(InfoLevel)
  59. atomic.StoreUint32(&initialized, 1)
  60. slowLog = newLogWriter(log.New(&buf, "", flags))
  61. l.WithDuration(time.Second).Slow(testlog)
  62. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  63. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  64. buf.Reset()
  65. l.WithDuration(time.Second).Slowf(testlog)
  66. assert.True(t, strings.Contains(buf.String(), mockTraceId))
  67. assert.True(t, strings.Contains(buf.String(), mockSpanId))
  68. }
  69. func TestTraceWithoutContext(t *testing.T) {
  70. var buf mockWriter
  71. l := WithContext(context.Background()).(*traceLogger)
  72. SetLevel(InfoLevel)
  73. atomic.StoreUint32(&initialized, 1)
  74. infoLog = newLogWriter(log.New(&buf, "", flags))
  75. l.WithDuration(time.Second).Info(testlog)
  76. assert.False(t, strings.Contains(buf.String(), mockTraceId))
  77. assert.False(t, strings.Contains(buf.String(), mockSpanId))
  78. buf.Reset()
  79. l.WithDuration(time.Second).Infof(testlog)
  80. assert.False(t, strings.Contains(buf.String(), mockTraceId))
  81. assert.False(t, strings.Contains(buf.String(), mockSpanId))
  82. }
  83. type mockTrace struct{}
  84. func (t mockTrace) TraceId() string {
  85. return mockTraceId
  86. }
  87. func (t mockTrace) SpanId() string {
  88. return mockSpanId
  89. }
  90. func (t mockTrace) Finish() {
  91. }
  92. func (t mockTrace) Fork(ctx context.Context, serviceName, operationName string) (context.Context, tracespec.Trace) {
  93. return nil, nil
  94. }
  95. func (t mockTrace) Follow(ctx context.Context, serviceName, operationName string) (context.Context, tracespec.Trace) {
  96. return nil, nil
  97. }
  98. func (t mockTrace) Visit(fn func(key string, val string) bool) {
  99. }