22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System . Collections ;
5+ using System . Diagnostics ;
56using Serilog . Events ;
67using Microsoft . Extensions . Logging ;
78using Serilog . Debugging ;
@@ -138,11 +139,11 @@ public void LogsCorrectMessage()
138139
139140 logger . Log < object > ( LogLevel . Information , 0 , null ! , null ! , null ! ) ;
140141 logger . Log ( LogLevel . Information , 0 , TestMessage , null ! , null ! ) ;
141- logger . Log < object > ( LogLevel . Information , 0 , null ! , null ! , ( _ , __ ) => TestMessage ) ;
142+ logger . Log < object > ( LogLevel . Information , 0 , null ! , null ! , ( _ , _ ) => TestMessage ) ;
142143
143144 Assert . Equal ( 3 , sink . Writes . Count ) ;
144145
145- Assert . Equal ( 1 , sink . Writes [ 0 ] . Properties . Count ) ;
146+ Assert . Single ( sink . Writes [ 0 ] . Properties ) ;
146147 Assert . Empty ( sink . Writes [ 0 ] . RenderMessage ( ) ) ;
147148
148149 Assert . Equal ( 2 , sink . Writes [ 1 ] . Properties . Count ) ;
@@ -308,7 +309,7 @@ public void WhenDisposeIsTrueProvidedLoggerIsDisposed()
308309 }
309310
310311 [ Fact ]
311- public void BeginScopeDestructuresObjectsWhenDestructurerIsUsedInMessageTemplate ( )
312+ public void BeginScopeDestructuresObjectsWhenCapturingOperatorIsUsedInMessageTemplate ( )
312313 {
313314 var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
314315
@@ -328,7 +329,7 @@ public void BeginScopeDestructuresObjectsWhenDestructurerIsUsedInMessageTemplate
328329 }
329330
330331 [ Fact ]
331- public void BeginScopeDestructuresObjectsWhenDestructurerIsUsedInDictionary ( )
332+ public void BeginScopeDestructuresObjectsWhenCapturingOperatorIsUsedInDictionary ( )
332333 {
333334 var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
334335
@@ -348,7 +349,7 @@ public void BeginScopeDestructuresObjectsWhenDestructurerIsUsedInDictionary()
348349 }
349350
350351 [ Fact ]
351- public void BeginScopeDoesNotModifyKeyWhenDestructurerIsNotUsedInMessageTemplate ( )
352+ public void BeginScopeDoesNotModifyKeyWhenCapturingOperatorIsNotUsedInMessageTemplate ( )
352353 {
353354 var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
354355
@@ -362,7 +363,7 @@ public void BeginScopeDoesNotModifyKeyWhenDestructurerIsNotUsedInMessageTemplate
362363 }
363364
364365 [ Fact ]
365- public void BeginScopeDoesNotModifyKeyWhenDestructurerIsNotUsedInDictionary ( )
366+ public void BeginScopeDoesNotModifyKeyWhenCapturingOperatorIsNotUsedInDictionary ( )
366367 {
367368 var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
368369
@@ -466,7 +467,10 @@ public void MismatchedMessageTemplateParameterCountIsHandled()
466467 {
467468 var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
468469
470+ #pragma warning disable CA2017
471+ // ReSharper disable once StructuredMessageTemplateProblem
469472 logger . LogInformation ( "Some test message with {Two} {Properties}" , "OneProperty" ) ;
473+ #pragma warning restore CA2017
470474
471475 Assert . Empty ( sink . Writes ) ;
472476 }
@@ -475,7 +479,7 @@ public void MismatchedMessageTemplateParameterCountIsHandled()
475479 public void ExceptionFromAuditSinkIsUnhandled ( )
476480 {
477481 var serilogLogger = new LoggerConfiguration ( )
478- . AuditTo . Sink ( new MySink ( ) )
482+ . AuditTo . Sink ( new UnimplementedSink ( ) )
479483 . CreateLogger ( ) ;
480484
481485 var provider = new SerilogLoggerProvider ( serilogLogger ) ;
@@ -486,11 +490,38 @@ public void ExceptionFromAuditSinkIsUnhandled()
486490 Assert . Equal ( "Oops" , ex . InnerException . Message ) ;
487491 }
488492
489- private class MySink : ILogEventSink
493+ class UnimplementedSink : ILogEventSink
490494 {
491495 public void Emit ( LogEvent logEvent )
492496 {
493497 throw new NotImplementedException ( "Oops" ) ;
494498 }
495499 }
500+
501+ [ Fact ]
502+ public void TraceAndSpanIdsAreCaptured ( )
503+ {
504+ #if FORCE_W3C_ACTIVITY_ID
505+ Activity . DefaultIdFormat = ActivityIdFormat . W3C ;
506+ Activity . ForceDefaultIdFormat = true ;
507+ #endif
508+
509+ using var listener = new ActivityListener ( ) ;
510+ listener . ShouldListenTo = _ => true ;
511+ listener . Sample = ( ref ActivityCreationOptions < ActivityContext > _ ) => ActivitySamplingResult . AllData ;
512+
513+ ActivitySource . AddActivityListener ( listener ) ;
514+
515+ var source = new ActivitySource ( "test.activity" , "1.0.0" ) ;
516+ using var activity = source . StartActivity ( ) ;
517+ Assert . NotNull ( Activity . Current ) ;
518+
519+ var ( logger , sink ) = SetUp ( LogLevel . Trace ) ;
520+ logger . LogInformation ( "Hello trace and span!" ) ;
521+
522+ var evt = Assert . Single ( sink . Writes ) ;
523+
524+ Assert . Equal ( Activity . Current . TraceId , evt . TraceId ) ;
525+ Assert . Equal ( Activity . Current . SpanId , evt . SpanId ) ;
526+ }
496527}
0 commit comments