diff --git a/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs b/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs index 2766504b..938b5271 100644 --- a/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs +++ b/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs @@ -51,9 +51,9 @@ public KeyValuePair GetStandardColumnNameAndValue(StandardColumn case StandardColumn.Level: return new KeyValuePair(_columnOptions.Level.ColumnName, _columnOptions.Level.StoreAsEnum ? (object)logEvent.Level : logEvent.Level.ToString()); case StandardColumn.TraceId: - return new KeyValuePair(_columnOptions.TraceId.ColumnName, logEvent.TraceId.ToString()); + return new KeyValuePair(_columnOptions.TraceId.ColumnName, logEvent.TraceId?.ToString()); case StandardColumn.SpanId: - return new KeyValuePair(_columnOptions.SpanId.ColumnName, logEvent.SpanId.ToString()); + return new KeyValuePair(_columnOptions.SpanId.ColumnName, logEvent.SpanId?.ToString()); case StandardColumn.TimeStamp: return GetTimeStampStandardColumnNameAndValue(logEvent); case StandardColumn.Exception: diff --git a/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs b/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs index a14b7302..87ef6023 100644 --- a/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs +++ b/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs @@ -282,6 +282,25 @@ public void GetStandardColumnNameAndValueForTraceIdReturnsLogLevelKeyValue() Assert.Equal("34898a9020e0390190b0982370034f00", result.Value); } + [Fact] + public void GetStandardColumnNameAndNullValueForTraceIdReturnsLogLevelKeyValue() + { + // Arrange + var traceId = default(ActivityTraceId); + var logEvent = new LogEvent( + new DateTimeOffset(2020, 1, 1, 0, 0, 0, 0, TimeSpan.Zero), + LogEventLevel.Debug, null, new MessageTemplate(new List() { new TextToken("Test message") }), + new List(), traceId, ActivitySpanId.CreateRandom()); + SetupSut(new MSSqlServer.ColumnOptions(), CultureInfo.InvariantCulture); + + // Act + var result = _sut.GetStandardColumnNameAndValue(StandardColumn.TraceId, logEvent); + + // Assert + Assert.Equal("TraceId", result.Key); + Assert.Null(result.Value); + } + [Fact] public void GetStandardColumnNameAndValueForSpanIdReturnsLogLevelKeyValue() { @@ -301,6 +320,25 @@ public void GetStandardColumnNameAndValueForSpanIdReturnsLogLevelKeyValue() Assert.Equal("0390190b09823700", result.Value); } + [Fact] + public void GetStandardColumnNameAndNullValueForSpanIdReturnsLogLevelKeyValue() + { + // Arrange + var spanId = default(ActivitySpanId); + var logEvent = new LogEvent( + new DateTimeOffset(2020, 1, 1, 0, 0, 0, 0, TimeSpan.Zero), + LogEventLevel.Debug, null, new MessageTemplate(new List() { new TextToken("Test message") }), + new List(), ActivityTraceId.CreateRandom(), spanId); + SetupSut(new MSSqlServer.ColumnOptions(), CultureInfo.InvariantCulture); + + // Act + var result = _sut.GetStandardColumnNameAndValue(StandardColumn.SpanId, logEvent); + + // Assert + Assert.Equal("SpanId", result.Key); + Assert.Null(result.Value); + } + [Fact] public void GetStandardColumnNameAndValueForLogLevelReturnsLogLevelKeyValueAsEnum() {