github.com/shuguocloud/go-zero@v1.3.0/core/logx/tracelogger_test.go (about) 1 package logx 2 3 import ( 4 "context" 5 "log" 6 "strings" 7 "sync/atomic" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/assert" 12 "go.opentelemetry.io/otel" 13 sdktrace "go.opentelemetry.io/otel/sdk/trace" 14 ) 15 16 const ( 17 traceKey = "trace" 18 spanKey = "span" 19 ) 20 21 func TestTraceLog(t *testing.T) { 22 var buf mockWriter 23 atomic.StoreUint32(&initialized, 1) 24 otp := otel.GetTracerProvider() 25 tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample())) 26 otel.SetTracerProvider(tp) 27 defer otel.SetTracerProvider(otp) 28 29 ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar") 30 WithContext(ctx).(*traceLogger).write(&buf, levelInfo, testlog) 31 assert.True(t, strings.Contains(buf.String(), traceKey)) 32 assert.True(t, strings.Contains(buf.String(), spanKey)) 33 } 34 35 func TestTraceError(t *testing.T) { 36 var buf mockWriter 37 atomic.StoreUint32(&initialized, 1) 38 errorLog = newLogWriter(log.New(&buf, "", flags)) 39 otp := otel.GetTracerProvider() 40 tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample())) 41 otel.SetTracerProvider(tp) 42 defer otel.SetTracerProvider(otp) 43 44 ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar") 45 l := WithContext(ctx).(*traceLogger) 46 SetLevel(InfoLevel) 47 l.WithDuration(time.Second).Error(testlog) 48 assert.True(t, strings.Contains(buf.String(), traceKey)) 49 assert.True(t, strings.Contains(buf.String(), spanKey)) 50 buf.Reset() 51 l.WithDuration(time.Second).Errorf(testlog) 52 assert.True(t, strings.Contains(buf.String(), traceKey)) 53 assert.True(t, strings.Contains(buf.String(), spanKey)) 54 buf.Reset() 55 l.WithDuration(time.Second).Errorv(testlog) 56 assert.True(t, strings.Contains(buf.String(), traceKey)) 57 assert.True(t, strings.Contains(buf.String(), spanKey)) 58 } 59 60 func TestTraceInfo(t *testing.T) { 61 var buf mockWriter 62 atomic.StoreUint32(&initialized, 1) 63 infoLog = newLogWriter(log.New(&buf, "", flags)) 64 otp := otel.GetTracerProvider() 65 tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample())) 66 otel.SetTracerProvider(tp) 67 defer otel.SetTracerProvider(otp) 68 69 ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar") 70 l := WithContext(ctx).(*traceLogger) 71 SetLevel(InfoLevel) 72 l.WithDuration(time.Second).Info(testlog) 73 assert.True(t, strings.Contains(buf.String(), traceKey)) 74 assert.True(t, strings.Contains(buf.String(), spanKey)) 75 buf.Reset() 76 l.WithDuration(time.Second).Infof(testlog) 77 assert.True(t, strings.Contains(buf.String(), traceKey)) 78 assert.True(t, strings.Contains(buf.String(), spanKey)) 79 buf.Reset() 80 l.WithDuration(time.Second).Infov(testlog) 81 assert.True(t, strings.Contains(buf.String(), traceKey)) 82 assert.True(t, strings.Contains(buf.String(), spanKey)) 83 } 84 85 func TestTraceInfoConsole(t *testing.T) { 86 old := encoding 87 encoding = plainEncodingType 88 defer func() { 89 encoding = old 90 }() 91 92 var buf mockWriter 93 atomic.StoreUint32(&initialized, 1) 94 infoLog = newLogWriter(log.New(&buf, "", flags)) 95 otp := otel.GetTracerProvider() 96 tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample())) 97 otel.SetTracerProvider(tp) 98 defer otel.SetTracerProvider(otp) 99 100 ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar") 101 l := WithContext(ctx).(*traceLogger) 102 SetLevel(InfoLevel) 103 l.WithDuration(time.Second).Info(testlog) 104 assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx))) 105 assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx))) 106 buf.Reset() 107 l.WithDuration(time.Second).Infof(testlog) 108 assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx))) 109 assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx))) 110 buf.Reset() 111 l.WithDuration(time.Second).Infov(testlog) 112 assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx))) 113 assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx))) 114 } 115 116 func TestTraceSlow(t *testing.T) { 117 var buf mockWriter 118 atomic.StoreUint32(&initialized, 1) 119 slowLog = newLogWriter(log.New(&buf, "", flags)) 120 otp := otel.GetTracerProvider() 121 tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample())) 122 otel.SetTracerProvider(tp) 123 defer otel.SetTracerProvider(otp) 124 125 ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar") 126 l := WithContext(ctx).(*traceLogger) 127 SetLevel(InfoLevel) 128 l.WithDuration(time.Second).Slow(testlog) 129 assert.True(t, strings.Contains(buf.String(), traceKey)) 130 assert.True(t, strings.Contains(buf.String(), spanKey)) 131 buf.Reset() 132 l.WithDuration(time.Second).Slowf(testlog) 133 assert.True(t, strings.Contains(buf.String(), traceKey)) 134 assert.True(t, strings.Contains(buf.String(), spanKey)) 135 buf.Reset() 136 l.WithDuration(time.Second).Slowv(testlog) 137 assert.True(t, strings.Contains(buf.String(), traceKey)) 138 assert.True(t, strings.Contains(buf.String(), spanKey)) 139 } 140 141 func TestTraceWithoutContext(t *testing.T) { 142 var buf mockWriter 143 atomic.StoreUint32(&initialized, 1) 144 infoLog = newLogWriter(log.New(&buf, "", flags)) 145 l := WithContext(context.Background()).(*traceLogger) 146 SetLevel(InfoLevel) 147 l.WithDuration(time.Second).Info(testlog) 148 assert.False(t, strings.Contains(buf.String(), traceKey)) 149 assert.False(t, strings.Contains(buf.String(), spanKey)) 150 buf.Reset() 151 l.WithDuration(time.Second).Infof(testlog) 152 assert.False(t, strings.Contains(buf.String(), traceKey)) 153 assert.False(t, strings.Contains(buf.String(), spanKey)) 154 }