Skip to content

Commit 6152c32

Browse files
authored
Merge pull request serilog#160 from jonnybi/dev
added stringification support
2 parents 9f5a6a1 + 8428510 commit 6152c32

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
7878
if (logger.BindProperty(property.Key.Substring(1), property.Value, true, out var destructured))
7979
properties.Add(destructured);
8080
}
81+
else if (property.Key.StartsWith("$"))
82+
{
83+
if (logger.BindProperty(property.Key.Substring(1), property.Value?.ToString(), true, out var stringified))
84+
properties.Add(stringified);
85+
}
8186
else
8287
{
8388
if (logger.BindProperty(property.Key, property.Value, false, out var bound))

src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLoggerScope.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,21 @@ public void EnrichAndCreateScopeItem(LogEvent logEvent, ILogEventPropertyFactory
7171

7272
var key = stateProperty.Key;
7373
var destructureObject = false;
74+
var value = stateProperty.Value;
7475

7576
if (key.StartsWith("@"))
7677
{
7778
key = key.Substring(1);
7879
destructureObject = true;
7980
}
8081

81-
var property = propertyFactory.CreateProperty(key, stateProperty.Value, destructureObject);
82+
if (key.StartsWith("$"))
83+
{
84+
key = key.Substring(1);
85+
value = value?.ToString();
86+
}
87+
88+
var property = propertyFactory.CreateProperty(key, value, destructureObject);
8289
logEvent.AddPropertyIfAbsent(property);
8390
}
8491
}

test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,21 @@ public void SingleScopeProperty()
162162
Assert.Equal("\"pizza\"", sink.Writes[0].Properties["Name"].ToString());
163163
}
164164

165+
[Fact]
166+
public void StringifyScopeProperty()
167+
{
168+
var (logger, sink) = SetUp(LogLevel.Trace);
169+
170+
using (logger.BeginScope("{$values}", new int[] { 1, 2, 3, 4 }))
171+
{
172+
logger.Log(LogLevel.Information, 0, TestMessage, null, null);
173+
}
174+
175+
Assert.Equal(1, sink.Writes.Count);
176+
Assert.True(sink.Writes[0].Properties.ContainsKey("values"));
177+
Assert.Equal("\"System.Int32[]\"", sink.Writes[0].Properties["values"].ToString());
178+
}
179+
165180
[Fact]
166181
public void NestedScopeSameProperty()
167182
{
@@ -219,6 +234,24 @@ public void CarriesMessageTemplateProperties()
219234
Assert.Empty(selfLog.ToString());
220235
}
221236

237+
[Fact]
238+
public void CarriesMessageTemplatePropertiesWhenStringificationIsUsed()
239+
{
240+
var selfLog = new StringWriter();
241+
SelfLog.Enable(selfLog);
242+
var (logger, sink) = SetUp(LogLevel.Trace);
243+
var array = new[] { 1, 2, 3, 4 };
244+
245+
logger.LogInformation("{$array}", array);
246+
247+
Assert.True(sink.Writes[0].Properties.ContainsKey("array"));
248+
Assert.Equal("\"System.Int32[]\"", sink.Writes[0].Properties["array"].ToString());
249+
Assert.Equal("{$array}", sink.Writes[0].MessageTemplate.Text);
250+
251+
SelfLog.Disable();
252+
Assert.Empty(selfLog.ToString());
253+
}
254+
222255
[Fact]
223256
public void CarriesEventIdIfNonzero()
224257
{

0 commit comments

Comments
 (0)