@@ -29,14 +29,14 @@ public void TestProcessMessage()
2929 {
3030 var logRecord = new LogRecord ( ) ;
3131
32- LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : "" ) , null ) ;
32+ LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : "" ) , OpenTelemetrySinkOptions . DefaultIncludedData , null ) ;
3333 Assert . Null ( logRecord . Body ) ;
3434
35- LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : "\t \f " ) , null ) ;
35+ LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : "\t \f " ) , OpenTelemetrySinkOptions . DefaultIncludedData , null ) ;
3636 Assert . Null ( logRecord . Body ) ;
3737
3838 const string message = "log message" ;
39- LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : message ) , null ) ;
39+ LogRecordBuilder . ProcessMessage ( logRecord , Some . SerilogEvent ( messageTemplate : message ) , OpenTelemetrySinkOptions . DefaultIncludedData , null ) ;
4040 Assert . NotNull ( logRecord . Body ) ;
4141 Assert . Equal ( message , logRecord . Body . StringValue ) ;
4242 }
@@ -45,7 +45,7 @@ public void TestProcessMessage()
4545 public void TestProcessLevel ( )
4646 {
4747 var logRecord = new LogRecord ( ) ;
48- var logEvent = Some . SerilogEvent ( ) ;
48+ var logEvent = Some . DefaultSerilogEvent ( ) ;
4949
5050 LogRecordBuilder . ProcessLevel ( logRecord , logEvent ) ;
5151
@@ -57,7 +57,7 @@ public void TestProcessLevel()
5757 public void TestProcessProperties ( )
5858 {
5959 var logRecord = new LogRecord ( ) ;
60- var logEvent = Some . SerilogEvent ( ) ;
60+ var logEvent = Some . DefaultSerilogEvent ( ) ;
6161
6262 var prop = new LogEventProperty ( "property_name" , new ScalarValue ( "ok" ) ) ;
6363 var propertyKeyValue = PrimitiveConversions . NewStringAttribute ( "property_name" , "ok" ) ;
@@ -76,7 +76,7 @@ public void TestTimestamp()
7676 var nowNano = PrimitiveConversions . ToUnixNano ( now ) ;
7777
7878 var logRecord = new LogRecord ( ) ;
79- var logEvent = Some . SerilogEvent ( timestamp : now ) ;
79+ var logEvent = Some . SerilogEvent ( Some . TestMessageTemplate , timestamp : now ) ;
8080
8181 LogRecordBuilder . ProcessTimestamp ( logRecord , logEvent ) ;
8282
@@ -96,7 +96,7 @@ public void TestException()
9696 catch ( Exception ex )
9797 {
9898 var logRecord = new LogRecord ( ) ;
99- var logEvent = Some . SerilogEvent ( ex : ex ) ;
99+ var logEvent = Some . SerilogEvent ( Some . TestMessageTemplate , ex : ex ) ;
100100
101101 LogRecordBuilder . ProcessException ( logRecord , logEvent ) ;
102102
@@ -131,11 +131,14 @@ public void IncludeMessageTemplateMD5Hash()
131131 [ Fact ]
132132 public void IncludeMessageTemplateText ( )
133133 {
134- var logEvent = Some . SerilogEvent ( messageTemplate : Some . TestMessageTemplate ) ;
134+ var messageTemplate = "Hello, {Name}" ;
135+ var properties = new List < LogEventProperty > { new ( "Name" , new ScalarValue ( "World" ) ) } ;
136+
137+ var logEvent = Some . SerilogEvent ( messageTemplate , properties ) ;
135138
136139 var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , IncludedData . MessageTemplateTextAttribute , new ( ) ) ;
137140
138- var expectedAttribute = new KeyValue { Key = SemanticConventions . AttributeMessageTemplateText , Value = new ( ) { StringValue = Some . TestMessageTemplate } } ;
141+ var expectedAttribute = new KeyValue { Key = SemanticConventions . AttributeMessageTemplateText , Value = new ( ) { StringValue = messageTemplate } } ;
139142 Assert . Contains ( expectedAttribute , logRecord . Attributes ) ;
140143 }
141144
@@ -146,7 +149,7 @@ public void IncludeTraceIdWhenActivityIsNull()
146149
147150 var collector = new ActivityContextCollector ( ) ;
148151
149- var logEvent = Some . SerilogEvent ( ) ;
152+ var logEvent = Some . DefaultSerilogEvent ( ) ;
150153 collector . CollectFor ( logEvent ) ;
151154
152155 var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , IncludedData . TraceIdField | IncludedData . SpanIdField , collector ) ;
@@ -158,11 +161,9 @@ public void IncludeTraceIdWhenActivityIsNull()
158161 [ Fact ]
159162 public void IncludeTraceIdAndSpanId ( )
160163 {
161- using var listener = new ActivityListener
162- {
163- ShouldListenTo = _ => true ,
164- Sample = ( ref ActivityCreationOptions < ActivityContext > _ ) => ActivitySamplingResult . AllData ,
165- } ;
164+ using var listener = new ActivityListener ( ) ;
165+ listener . ShouldListenTo = _ => true ;
166+ listener . Sample = ( ref ActivityCreationOptions < ActivityContext > _ ) => ActivitySamplingResult . AllData ;
166167
167168 ActivitySource . AddActivityListener ( listener ) ;
168169
@@ -172,12 +173,71 @@ public void IncludeTraceIdAndSpanId()
172173
173174 var collector = new ActivityContextCollector ( ) ;
174175
175- var logEvent = Some . SerilogEvent ( ) ;
176+ var logEvent = Some . DefaultSerilogEvent ( ) ;
176177 collector . CollectFor ( logEvent ) ;
177178
178179 var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , IncludedData . TraceIdField | IncludedData . SpanIdField , collector ) ;
179180
180181 Assert . Equal ( logRecord . TraceId , PrimitiveConversions . ToOpenTelemetryTraceId ( Activity . Current . TraceId . ToHexString ( ) ) ) ;
181182 Assert . Equal ( logRecord . SpanId , PrimitiveConversions . ToOpenTelemetrySpanId ( Activity . Current . SpanId . ToHexString ( ) ) ) ;
182183 }
184+
185+ [ Fact ]
186+ public void TemplateBodyIncludesMessageTemplateInBody ( )
187+ {
188+ const string messageTemplate = "Hello, {Name}" ;
189+ var properties = new List < LogEventProperty > { new ( "Name" , new ScalarValue ( "World" ) ) } ;
190+
191+ var logRecord = LogRecordBuilder . ToLogRecord ( Some . SerilogEvent ( messageTemplate , properties ) , null , IncludedData . TemplateBody , new ( ) ) ;
192+ Assert . NotNull ( logRecord . Body ) ;
193+ Assert . Equal ( messageTemplate , logRecord . Body . StringValue ) ;
194+ }
195+
196+ [ Fact ]
197+ public void NoRenderingsIncludedWhenNoneInTemplate ( )
198+ {
199+ var logEvent = Some . SerilogEvent ( messageTemplate : "Hello, {Name}" , properties : new [ ] { new LogEventProperty ( "Name" , new ScalarValue ( "World" ) ) } ) ;
200+
201+ var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , IncludedData . MessageTemplateRenderingsAttribute , new ( ) ) ;
202+
203+ Assert . DoesNotContain ( SemanticConventions . AttributeMessageTemplateRenderings , logRecord . Attributes . Select ( a => a . Key ) ) ;
204+ }
205+
206+ [ Fact ]
207+ public void RenderingsIncludedWhenPresentInTemplate ( )
208+ {
209+ var logEvent = Some . SerilogEvent ( messageTemplate : "{First:0} {Second} {Third:0.00}" , properties : new [ ]
210+ {
211+ new LogEventProperty ( "First" , new ScalarValue ( 123.456 ) ) ,
212+ new LogEventProperty ( "Second" , new ScalarValue ( 234.567 ) ) ,
213+ new LogEventProperty ( "Third" , new ScalarValue ( 345.678 ) )
214+ } ) ;
215+
216+ var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , IncludedData . MessageTemplateRenderingsAttribute , new ( ) ) ;
217+
218+ var expectedAttribute = new KeyValue { Key = SemanticConventions . AttributeMessageTemplateRenderings , Value = new ( )
219+ {
220+ ArrayValue = new ArrayValue {
221+ Values =
222+ {
223+ // Only values for tokens with format strings are included.
224+ new AnyValue { StringValue = "123" } ,
225+ new AnyValue { StringValue = "345.68" } ,
226+ }
227+ }
228+ } } ;
229+ Assert . Contains ( expectedAttribute , logRecord . Attributes ) ;
230+ }
231+
232+ [ Fact ]
233+ public void RenderingsNotIncludedWhenIncludedDataDoesNotSpecifyThem ( )
234+ {
235+ var logEvent = Some . SerilogEvent ( messageTemplate : "{First:0}" , properties : new [ ]
236+ {
237+ new LogEventProperty ( "First" , new ScalarValue ( 123.456 ) )
238+ } ) ;
239+
240+ var logRecord = LogRecordBuilder . ToLogRecord ( logEvent , null , OpenTelemetrySinkOptions . DefaultIncludedData , new ( ) ) ;
241+ Assert . DoesNotContain ( SemanticConventions . AttributeMessageTemplateRenderings , logRecord . Attributes . Select ( a => a . Key ) ) ;
242+ }
183243}
0 commit comments