@@ -17,6 +17,8 @@ import (
1717 "time"
1818
1919 "github.com/stretchr/testify/assert"
20+ "go.opentelemetry.io/otel"
21+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
2022)
2123
2224var (
@@ -1157,3 +1159,66 @@ func (s *countingStringer) String() string {
11571159 atomic .AddInt32 (& s .count , 1 )
11581160 return "countingStringer"
11591161}
1162+
1163+ func TestLogKey (t * testing.T ) {
1164+ setupOnce = sync.Once {}
1165+ MustSetup (LogConf {
1166+ ServiceName : "any" ,
1167+ Mode : "console" ,
1168+ Encoding : "json" ,
1169+ TimeFormat : timeFormat ,
1170+ LogKey : logKeyConf {
1171+ CallerKey : "_caller" ,
1172+ ContentKey : "_content" ,
1173+ DurationKey : "_duration" ,
1174+ LevelKey : "_level" ,
1175+ SpanKey : "_span" ,
1176+ TimestampKey : "_timestamp" ,
1177+ TraceKey : "_trace" ,
1178+ TruncatedKey : "_truncated" ,
1179+ },
1180+ })
1181+
1182+ t .Cleanup (func () {
1183+ setupLogKey (logKeyConf {
1184+ CallerKey : defaultCallerKey ,
1185+ ContentKey : defaultContentKey ,
1186+ DurationKey : defaultDurationKey ,
1187+ LevelKey : defaultLevelKey ,
1188+ SpanKey : defaultSpanKey ,
1189+ TimestampKey : defaultTimestampKey ,
1190+ TraceKey : defaultTraceKey ,
1191+ TruncatedKey : defaultTruncatedKey ,
1192+ })
1193+ })
1194+
1195+ const message = "hello there"
1196+ w := new (mockWriter )
1197+ old := writer .Swap (w )
1198+ defer writer .Store (old )
1199+
1200+ otp := otel .GetTracerProvider ()
1201+ tp := sdktrace .NewTracerProvider (sdktrace .WithSampler (sdktrace .AlwaysSample ()))
1202+ otel .SetTracerProvider (tp )
1203+ defer otel .SetTracerProvider (otp )
1204+
1205+ ctx , span := tp .Tracer ("trace-id" ).Start (context .Background (), "span-id" )
1206+ defer span .End ()
1207+
1208+ WithContext (ctx ).WithDuration (time .Second ).Info (message )
1209+ now := time .Now ()
1210+
1211+ var m map [string ]string
1212+ if err := json .Unmarshal ([]byte (w .String ()), & m ); err != nil {
1213+ t .Error (err )
1214+ }
1215+ assert .Equal (t , "info" , m ["_level" ])
1216+ assert .Equal (t , message , m ["_content" ])
1217+ assert .Equal (t , "1000.0ms" , m ["_duration" ])
1218+ assert .Regexp (t , `logx/logs_test.go:\d+` , m ["_caller" ])
1219+ assert .NotEmpty (t , m ["_trace" ])
1220+ assert .NotEmpty (t , m ["_span" ])
1221+ parsedTime , err := time .Parse (timeFormat , m ["_timestamp" ])
1222+ assert .True (t , err == nil )
1223+ assert .Equal (t , now .Minute (), parsedTime .Minute ())
1224+ }
0 commit comments