Skip to content

Commit 70012ac

Browse files
committed
Changed a public field LoggerConfigurationMSSqlServerExtensions.AppConfigSectionName from static to const avoiding a possible race condition during tests.
1 parent 58b0a5a commit 70012ac

File tree

2 files changed

+55
-10
lines changed

2 files changed

+55
-10
lines changed

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

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
using Serilog.Sinks.MSSqlServer;
1919
using System.Configuration;
2020
using Serilog.Formatting;
21-
using System.Diagnostics.CodeAnalysis;
2221

2322
// System.Configuration support for .NET Framework 4.5.2 libraries and apps.
2423

@@ -32,9 +31,7 @@ public static class LoggerConfigurationMSSqlServerExtensions
3231
/// <summary>
3332
/// The configuration section name for app.config or web.config configuration files.
3433
/// </summary>
35-
// TODO: Make this non-static. It could cause race condition in unit tests!
36-
[SuppressMessage("Usage", "CA2211:Non-constant fields should not be visible", Justification = "Too hard to change. Accepted for now.")]
37-
public static string AppConfigSectionName = "MSSqlServerSettingsSection";
34+
public const string AppConfigSectionName = "MSSqlServerSettingsSection";
3835

3936
/// <summary>
4037
/// Adds a sink that writes log events to a table in a MSSqlServer database.
@@ -66,6 +63,33 @@ public static LoggerConfiguration MSSqlServer(
6663
bool autoCreateSqlTable = false,
6764
ColumnOptions columnOptions = null,
6865
string schemaName = "dbo",
66+
ITextFormatter logEventFormatter = null) =>
67+
loggerConfiguration.MSSqlServer(
68+
configSectionName: AppConfigSectionName,
69+
connectionString,
70+
tableName,
71+
restrictedToMinimumLevel,
72+
batchPostingLimit,
73+
period,
74+
formatProvider,
75+
autoCreateSqlTable,
76+
columnOptions,
77+
schemaName,
78+
logEventFormatter);
79+
80+
// Internal overload with parameter configSectionName used by tests to override the config section
81+
internal static LoggerConfiguration MSSqlServer(
82+
this LoggerSinkConfiguration loggerConfiguration,
83+
string configSectionName,
84+
string connectionString,
85+
string tableName,
86+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
87+
int batchPostingLimit = MSSqlServerSink.DefaultBatchPostingLimit,
88+
TimeSpan? period = null,
89+
IFormatProvider formatProvider = null,
90+
bool autoCreateSqlTable = false,
91+
ColumnOptions columnOptions = null,
92+
string schemaName = "dbo",
6993
ITextFormatter logEventFormatter = null)
7094
{
7195
if (loggerConfiguration == null)
@@ -75,7 +99,7 @@ public static LoggerConfiguration MSSqlServer(
7599
var colOpts = columnOptions ?? new ColumnOptions();
76100

77101
var systemConfiguration = new ApplySystemConfiguration();
78-
if (ConfigurationManager.GetSection(AppConfigSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
102+
if (ConfigurationManager.GetSection(configSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
79103
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
80104

81105
connectionString = systemConfiguration.GetConnectionString(connectionString);
@@ -120,6 +144,29 @@ public static LoggerConfiguration MSSqlServer(
120144
bool autoCreateSqlTable = false,
121145
ColumnOptions columnOptions = null,
122146
string schemaName = "dbo",
147+
ITextFormatter logEventFormatter = null) =>
148+
loggerAuditSinkConfiguration.MSSqlServer(
149+
configSectionName: AppConfigSectionName,
150+
connectionString,
151+
tableName,
152+
restrictedToMinimumLevel,
153+
formatProvider,
154+
autoCreateSqlTable,
155+
columnOptions,
156+
schemaName,
157+
logEventFormatter);
158+
159+
// Internal overload with parameter configSectionName used by tests to override the config section
160+
internal static LoggerConfiguration MSSqlServer(
161+
this LoggerAuditSinkConfiguration loggerAuditSinkConfiguration,
162+
string configSectionName,
163+
string connectionString,
164+
string tableName,
165+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
166+
IFormatProvider formatProvider = null,
167+
bool autoCreateSqlTable = false,
168+
ColumnOptions columnOptions = null,
169+
string schemaName = "dbo",
123170
ITextFormatter logEventFormatter = null)
124171
{
125172
if (loggerAuditSinkConfiguration == null)
@@ -128,7 +175,7 @@ public static LoggerConfiguration MSSqlServer(
128175
var colOpts = columnOptions ?? new ColumnOptions();
129176

130177
var systemConfiguration = new ApplySystemConfiguration();
131-
if (ConfigurationManager.GetSection(AppConfigSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
178+
if (ConfigurationManager.GetSection(configSectionName) is MSSqlServerConfigurationSection serviceConfigSection)
132179
colOpts = systemConfiguration.ConfigureColumnOptions(serviceConfigSection, colOpts);
133180

134181
connectionString = systemConfiguration.GetConnectionString(connectionString);

test/Serilog.Sinks.MSSqlServer.Tests/Configuration/Extensions/System.Configuration/ConfigurationExtensionsTests.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,9 @@ public void CustomStandardColumnNames()
4444
{
4545
var standardNames = new List<string> { "CustomMessage", "CustomMessageTemplate", "CustomLevel", "CustomTimeStamp", "CustomException", "CustomProperties" };
4646

47-
LoggerConfigurationMSSqlServerExtensions.AppConfigSectionName = "CustomStandardColumnNames";
48-
4947
var loggerConfiguration = new LoggerConfiguration();
5048
Log.Logger = loggerConfiguration.WriteTo.MSSqlServer(
49+
configSectionName: "CustomStandardColumnNames",
5150
connectionString: DatabaseFixture.LogEventsConnectionString,
5251
tableName: DatabaseFixture.LogTableName,
5352
autoCreateSqlTable: true)
@@ -71,10 +70,9 @@ public void CustomStandardColumnNames()
7170
[Fact]
7271
public void CustomizedColumnList()
7372
{
74-
LoggerConfigurationMSSqlServerExtensions.AppConfigSectionName = "CustomizedColumnList";
75-
7673
var loggerConfiguration = new LoggerConfiguration();
7774
Log.Logger = loggerConfiguration.WriteTo.MSSqlServer(
75+
configSectionName: "CustomizedColumnList",
7876
connectionString: DatabaseFixture.LogEventsConnectionString,
7977
tableName: DatabaseFixture.LogTableName,
8078
autoCreateSqlTable: true)

0 commit comments

Comments
 (0)