diff --git a/src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs b/src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs index cae926c..d3d8bcc 100644 --- a/src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs +++ b/src/Serilog.Extensions.Logging/Extensions/Logging/SerilogLogger.cs @@ -40,7 +40,7 @@ public SerilogLogger( _provider = provider ?? throw new ArgumentNullException(nameof(provider)); // If a logger was passed, the provider has already added itself as an enricher - _logger = logger ?? Serilog.Log.Logger.ForContext(new[] { provider }); + _logger = logger ?? Serilog.Log.Logger.ForContext([provider]); if (name != null) { @@ -91,7 +91,7 @@ LogEvent PrepareWrite(LogEventLevel level, EventId eventId, TState state var properties = new Dictionary(); - if (state is IEnumerable> structure) + if (state is IEnumerable> structure) { foreach (var property in structure) { @@ -155,7 +155,7 @@ LogEvent PrepareWrite(LogEventLevel level, EventId eventId, TState state // The overridden `!=` operator on this type ignores `Name`. if (eventId.Id != 0 || eventId.Name != null) - properties.Add("EventId", _eventIdPropertyCache.GetOrCreatePropertyValue(in eventId)); + properties["EventId"] = _eventIdPropertyCache.GetOrCreatePropertyValue(in eventId); var (traceId, spanId) = Activity.Current is { } activity ? (activity.TraceId, activity.SpanId) : diff --git a/test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs b/test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs index 6b27c5d..bbbfb14 100644 --- a/test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs +++ b/test/Serilog.Extensions.Logging.Tests/SerilogLoggerTests.cs @@ -618,4 +618,20 @@ static void AssertHasScalarProperty(LogEvent logEvent, string name, object? expe var scalar = Assert.IsType(result); Assert.Equal(expectedValue, scalar.Value); } + + [Fact] + public void ConflictingEventIdTemplatePropertyIsIgnored() + { + var (logger, sink) = SetUp(LogLevel.Trace); + + var loggedEventId = 17; + logger.LogInformation(loggedEventId, "{EventId}", 42); + + var write = Assert.Single(sink.Writes); + var recordedEventIdProperty = Assert.IsType(write.Properties["EventId"]); + var recordedEventIdStructure = Assert.Single(recordedEventIdProperty.Properties, p => p.Name == "Id"); + var recordedEventIdPropertyValue = Assert.IsType(recordedEventIdStructure.Value); + var recordedEventId = Assert.IsType(recordedEventIdPropertyValue.Value); + Assert.Equal(loggedEventId, recordedEventId); + } }