123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package logx
- import (
- "context"
- "log"
- "strings"
- "sync/atomic"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- "go.opentelemetry.io/otel"
- sdktrace "go.opentelemetry.io/otel/sdk/trace"
- )
- const (
- traceKey = "trace"
- spanKey = "span"
- )
- func TestTraceLog(t *testing.T) {
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- otp := otel.GetTracerProvider()
- tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
- otel.SetTracerProvider(tp)
- defer otel.SetTracerProvider(otp)
- ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
- WithContext(ctx).(*traceLogger).write(&buf, levelInfo, testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- }
- func TestTraceError(t *testing.T) {
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- errorLog = newLogWriter(log.New(&buf, "", flags))
- otp := otel.GetTracerProvider()
- tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
- otel.SetTracerProvider(tp)
- defer otel.SetTracerProvider(otp)
- ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
- l := WithContext(ctx).(*traceLogger)
- SetLevel(InfoLevel)
- l.WithDuration(time.Second).Error(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Errorf(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Errorv(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- }
- func TestTraceInfo(t *testing.T) {
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- infoLog = newLogWriter(log.New(&buf, "", flags))
- otp := otel.GetTracerProvider()
- tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
- otel.SetTracerProvider(tp)
- defer otel.SetTracerProvider(otp)
- ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
- l := WithContext(ctx).(*traceLogger)
- SetLevel(InfoLevel)
- l.WithDuration(time.Second).Info(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Infof(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Infov(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- }
- func TestTraceInfoConsole(t *testing.T) {
- old := atomic.LoadUint32(&encoding)
- atomic.StoreUint32(&encoding, jsonEncodingType)
- defer func() {
- atomic.StoreUint32(&encoding, old)
- }()
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- infoLog = newLogWriter(log.New(&buf, "", flags))
- otp := otel.GetTracerProvider()
- tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
- otel.SetTracerProvider(tp)
- defer otel.SetTracerProvider(otp)
- ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
- l := WithContext(ctx).(*traceLogger)
- SetLevel(InfoLevel)
- l.WithDuration(time.Second).Info(testlog)
- assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx)))
- assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx)))
- buf.Reset()
- l.WithDuration(time.Second).Infof(testlog)
- assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx)))
- assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx)))
- buf.Reset()
- l.WithDuration(time.Second).Infov(testlog)
- assert.True(t, strings.Contains(buf.String(), traceIdFromContext(ctx)))
- assert.True(t, strings.Contains(buf.String(), spanIdFromContext(ctx)))
- }
- func TestTraceSlow(t *testing.T) {
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- slowLog = newLogWriter(log.New(&buf, "", flags))
- otp := otel.GetTracerProvider()
- tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.AlwaysSample()))
- otel.SetTracerProvider(tp)
- defer otel.SetTracerProvider(otp)
- ctx, _ := tp.Tracer("foo").Start(context.Background(), "bar")
- l := WithContext(ctx).(*traceLogger)
- SetLevel(InfoLevel)
- l.WithDuration(time.Second).Slow(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Slowf(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Slowv(testlog)
- assert.True(t, strings.Contains(buf.String(), traceKey))
- assert.True(t, strings.Contains(buf.String(), spanKey))
- }
- func TestTraceWithoutContext(t *testing.T) {
- var buf mockWriter
- atomic.StoreUint32(&initialized, 1)
- infoLog = newLogWriter(log.New(&buf, "", flags))
- l := WithContext(context.Background()).(*traceLogger)
- SetLevel(InfoLevel)
- l.WithDuration(time.Second).Info(testlog)
- assert.False(t, strings.Contains(buf.String(), traceKey))
- assert.False(t, strings.Contains(buf.String(), spanKey))
- buf.Reset()
- l.WithDuration(time.Second).Infof(testlog)
- assert.False(t, strings.Contains(buf.String(), traceKey))
- assert.False(t, strings.Contains(buf.String(), spanKey))
- }
|