diff --git a/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs b/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs index 435dc741..81d362d5 100644 --- a/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs +++ b/src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Output/StandardColumnDataGenerator.cs @@ -77,7 +77,7 @@ private KeyValuePair GetTimeStampStandardColumnNameAndValue(LogE if (_columnOptions.TimeStamp.DataType == SqlDbType.DateTimeOffset) return new KeyValuePair(_columnOptions.TimeStamp.ColumnName, dateTimeOffset); - return new KeyValuePair(_columnOptions.TimeStamp.ColumnName, dateTimeOffset.DateTime); + return new KeyValuePair(_columnOptions.TimeStamp.ColumnName, _columnOptions.TimeStamp.ConvertToUtc ? dateTimeOffset.UtcDateTime : dateTimeOffset.DateTime); } private string RenderLogEventColumn(LogEvent logEvent) 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 9c0b3265..d6e84b81 100644 --- a/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs +++ b/test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Output/StandardColumnDataGeneratorTests.cs @@ -487,6 +487,29 @@ public void GetStandardColumnNameAndValueForTimeStampCreatesUtcConvertedTimeStam Assert.Equal(new TimeSpan(0), timeStampColumnOffset.Offset); } + [Trait("Bugfix", "#659")] + [Fact] + public void GetStandardColumnNameAndValueForTimeStampCreatesUtcDateTimeUsingUtcDateTimeProperty() + { + // Arrange + var options = new Serilog.Sinks.MSSqlServer.ColumnOptions + { + TimeStamp = { ConvertToUtc = true } + }; + var testDateTimeOffset = new DateTimeOffset(2020, 1, 1, 9, 0, 0, new TimeSpan(1, 0, 0)); // Timezone +1:00 + var logEvent = CreateLogEvent(testDateTimeOffset); + SetupSut(options, CultureInfo.InvariantCulture); + + // Act + var column = _sut.GetStandardColumnNameAndValue(StandardColumn.TimeStamp, logEvent); + + // Assert + Assert.IsType(column.Value); + var timestamp = (DateTime)column.Value; + Assert.Equal(testDateTimeOffset.Hour - 1, timestamp.Hour); + Assert.Equal(DateTimeKind.Utc, timestamp.Kind); + } + [Fact] public void GetStandardColumnNameAndValueForExceptionReturnsExceptionKeyValue() {