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  }