Skip to content

Commit 8feab2d

Browse files
authored
Merge pull request #524 from serilog-mssql/dev
Release 6.6.0
2 parents 5ba23fc + e7ea121 commit 8feab2d

File tree

24 files changed

+303
-145
lines changed

24 files changed

+303
-145
lines changed

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 6.6.0
2+
* Fixed issue #509: Add SqlInsertStatementWriter which uses INSERT statements instead of SqlBulkCopy (thanks to @BrettJaner)
3+
14
# 6.5.2
25
* Fixed issue #517: Updated Microsoft.Data.SqlClient to 5.1.5 to fix CVE-2024-21319
36

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ Basic settings of the sink are configured using the properties in a `MSSqlServer
246246
* `BatchPeriod`
247247
* `EagerlyEmitFirstEvent`
248248
* `LevelSwitch`
249+
* `UseSqlBulkCopy`
249250

250251
### TableName
251252

@@ -291,6 +292,11 @@ This setting is not used by the audit sink as it writes each event immediately a
291292

292293
A switch allowing the pass-through minimum level to be changed at runtime. If this is set, the parameter `restrictedToMinimumLevel` in the [sink configuration method](#sink-configuration) is ignored.
293294

295+
### UseSqlBulkCopy
296+
297+
A flag to use `SqlBulkCopy` instead of individual INSERT statements when writing log events. The default is `true`.
298+
This setting is not used by the audit sink as it always uses INSERT statements to write events.
299+
294300
## ColumnOptions Object
295301

296302
Features of the log table are defined by changing properties on a `ColumnOptions` object:
@@ -319,7 +325,7 @@ Setting this to `true` changes the table to the clustered columnstore index (CCI
319325

320326
### DisableTriggers
321327

322-
Disabling triggers can significantly improve batch-write performance.
328+
Disabling triggers can significantly improve batch-write performance. Only applies when `SqlBulkCopy` is used.
323329

324330
### AdditionalColumns
325331

src/Serilog.Sinks.MSSqlServer/Configuration/Extensions/Hybrid/LoggerConfigurationMSSqlServerExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2023 Serilog Contributors
1+
// Copyright 2024 Serilog Contributors
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.

src/Serilog.Sinks.MSSqlServer/Configuration/Extensions/Microsoft.Extensions.Configuration/LoggerConfigurationMSSqlServerExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2023 Serilog Contributors
1+
// Copyright 2024 Serilog Contributors
22
//
33
// Licensed under the Apache License, Version 2.0 (the "License");
44
// you may not use this file except in compliance with the License.

src/Serilog.Sinks.MSSqlServer/Configuration/Implementations/Microsoft.Extensions.Configuration/MicrosoftExtensionsSinkOptionsProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ private static void ReadBatchSettings(IConfigurationSection config, MSSqlServerS
3333
SetProperty.IfNotNull<int>(config["batchPostingLimit"], val => sinkOptions.BatchPostingLimit = val);
3434
SetProperty.IfNotNull<string>(config["batchPeriod"], val => sinkOptions.BatchPeriod = TimeSpan.Parse(val, CultureInfo.InvariantCulture));
3535
SetProperty.IfNotNull<bool>(config["eagerlyEmitFirstEvent"], val => sinkOptions.EagerlyEmitFirstEvent = val);
36+
SetProperty.IfNotNull<bool>(config["useSqlBulkCopy"], val => sinkOptions.UseSqlBulkCopy = val);
3637
}
3738
}
3839
}

src/Serilog.Sinks.MSSqlServer/Configuration/Implementations/System.Configuration/MSSqlServerConfigurationSection.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,12 @@ public ValueConfigElement EagerlyEmitFirstEvent
198198
{
199199
get => (ValueConfigElement)base[nameof(EagerlyEmitFirstEvent)];
200200
}
201+
202+
[ConfigurationProperty(nameof(UseSqlBulkCopy))]
203+
public ValueConfigElement UseSqlBulkCopy
204+
{
205+
get => (ValueConfigElement)base[nameof(UseSqlBulkCopy)];
206+
}
201207
}
202208
}
203209

src/Serilog.Sinks.MSSqlServer/Configuration/Implementations/System.Configuration/SystemConfigurationSinkOptionsProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ private static void ReadBatchSettings(MSSqlServerConfigurationSection config, MS
3232
SetProperty.IfProvided<string>(config.BatchPeriod, nameof(config.BatchPeriod.Value), value => sinkOptions.BatchPeriod = TimeSpan.Parse(value, CultureInfo.InvariantCulture));
3333
SetProperty.IfProvided<bool>(config.EagerlyEmitFirstEvent, nameof(config.EagerlyEmitFirstEvent.Value),
3434
value => sinkOptions.EagerlyEmitFirstEvent = value);
35+
SetProperty.IfProvided<bool>(config.UseSqlBulkCopy, nameof(config.UseSqlBulkCopy.Value),
36+
value => sinkOptions.UseSqlBulkCopy = value);
3537
}
3638
}
3739
}

src/Serilog.Sinks.MSSqlServer/Serilog.Sinks.MSSqlServer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<Description>A Serilog sink that writes events to Microsoft SQL Server and Azure SQL</Description>
5-
<VersionPrefix>6.5.2</VersionPrefix>
5+
<VersionPrefix>6.6.0</VersionPrefix>
66
<Authors>Michiel van Oudheusden;Christian Kadluba;Serilog Contributors</Authors>
77
<TargetFrameworks>netstandard2.0;net462;net472;net6.0</TargetFrameworks>
88
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/ColumnOptions/ColumnOptions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public ICollection<StandardColumn> Store
9090

9191
/// <summary>
9292
/// Indicates if triggers should be disabled when inserting log entries.
93+
/// Only applies when SqlBulkCopy is used.
9394
/// </summary>
9495
public bool DisableTriggers { get; set; }
9596

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Dependencies/SinkDependenciesFactory.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@ internal static SinkDependencies Create(
5252
sqlCreateDatabaseWriter, sqlConnectionFactoryNoDb),
5353
SqlTableCreator = new SqlTableCreator(
5454
sqlCreateTableWriter, sqlConnectionFactory),
55-
SqlBulkBatchWriter = new SqlBulkBatchWriter(
56-
sinkOptions.TableName, sinkOptions.SchemaName, columnOptions.DisableTriggers,
57-
sqlConnectionFactory, logEventDataGenerator),
58-
SqlLogEventWriter = new SqlLogEventWriter(
55+
SqlBulkBatchWriter = sinkOptions.UseSqlBulkCopy
56+
? (ISqlBulkBatchWriter)new SqlBulkBatchWriter(
57+
sinkOptions.TableName, sinkOptions.SchemaName, columnOptions.DisableTriggers,
58+
sqlConnectionFactory, logEventDataGenerator)
59+
: (ISqlBulkBatchWriter)new SqlInsertStatementWriter(
60+
sinkOptions.TableName, sinkOptions.SchemaName,
61+
sqlConnectionFactory, logEventDataGenerator),
62+
SqlLogEventWriter = new SqlInsertStatementWriter(
5963
sinkOptions.TableName, sinkOptions.SchemaName,
6064
sqlConnectionFactory, logEventDataGenerator)
6165
};

0 commit comments

Comments
 (0)