From c8a3970f3f92416e577ed3e7f2b3f3efecd22e94 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Wed, 15 Feb 2017 14:58:46 +1000 Subject: [PATCH] Port of fix from https://github.com/serilog/serilog-extensions-logging/pull/67 by @skomis-mm to ensure all events are logged --- .../Extensions/Logging/SerilogLogger.cs | 29 +++++++++++++------ .../Extensions/Logging/SerilogLoggerTests.cs | 15 ++++++++-- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/Seq.Extensions.Logging/Serilog/Extensions/Logging/SerilogLogger.cs b/src/Seq.Extensions.Logging/Serilog/Extensions/Logging/SerilogLogger.cs index 57b22fd..f6b05a3 100644 --- a/src/Seq.Extensions.Logging/Serilog/Extensions/Logging/SerilogLogger.cs +++ b/src/Seq.Extensions.Logging/Serilog/Extensions/Logging/SerilogLogger.cs @@ -95,21 +95,32 @@ public void Log(LogLevel logLevel, EventId eventId, TState state, Except } } - if (messageTemplate == null && state != null) + if (messageTemplate == null) { - messageTemplate = "{State:l}"; - LogEventProperty stateProperty; - if (logger.BindProperty("State", AsLoggableValue(state, formatter), false, out stateProperty)) - properties.Add(stateProperty); - } + string propertyName = null; + if (state != null) + { + propertyName = "State"; + messageTemplate = "{State:l}"; + } + else if (formatter != null) + { + propertyName = "Message"; + messageTemplate = "{Message:l}"; + } - if (string.IsNullOrEmpty(messageTemplate)) - return; + if (propertyName != null) + { + LogEventProperty property; + if (logger.BindProperty(propertyName, AsLoggableValue(state, formatter), false, out property)) + properties.Add(property); + } + } if (eventId.Id != 0 || eventId.Name != null) properties.Add(CreateEventIdProperty(eventId)); - var parsedTemplate = _messageTemplateParser.Parse(messageTemplate); + var parsedTemplate = _messageTemplateParser.Parse(messageTemplate ?? ""); var evt = new LogEvent(DateTimeOffset.Now, level, exception, parsedTemplate, properties); logger.Write(evt); } diff --git a/test/Seq.Extensions.Logging.Tests/Serilog/Extensions/Logging/SerilogLoggerTests.cs b/test/Seq.Extensions.Logging.Tests/Serilog/Extensions/Logging/SerilogLoggerTests.cs index f4252d2..35fafb0 100644 --- a/test/Seq.Extensions.Logging.Tests/Serilog/Extensions/Logging/SerilogLoggerTests.cs +++ b/test/Seq.Extensions.Logging.Tests/Serilog/Extensions/Logging/SerilogLoggerTests.cs @@ -125,9 +125,20 @@ public void LogsCorrectMessage() logger.Log(LogLevel.Information, 0, null, null, null); logger.Log(LogLevel.Information, 0, TestMessage, null, null); + logger.Log(LogLevel.Information, 0, null, null, (_, __) => TestMessage); - Assert.Equal(1, sink.Writes.Count); - Assert.Equal(TestMessage, sink.Writes[0].RenderMessage()); + Assert.Equal(3, sink.Writes.Count); + + Assert.Equal(1, sink.Writes[0].Properties.Count); + Assert.Empty(sink.Writes[0].RenderMessage()); + + Assert.Equal(2, sink.Writes[1].Properties.Count); + Assert.True(sink.Writes[1].Properties.ContainsKey("State")); + Assert.Equal(TestMessage, sink.Writes[1].RenderMessage()); + + Assert.Equal(2, sink.Writes[2].Properties.Count); + Assert.True(sink.Writes[2].Properties.ContainsKey("Message")); + Assert.Equal(TestMessage, sink.Writes[2].RenderMessage()); } [Fact]