Skip to content

Commit e1f6a57

Browse files
committed
LevelSwitch support in config extensions
* Parameter levelSwitch for (non-obsolete) sink config extension methods. Allows log level manipulation at runtime. * Adapted test code.
1 parent 2f01378 commit e1f6a57

File tree

3 files changed

+83
-30
lines changed

3 files changed

+83
-30
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using System;
1616
using Microsoft.Extensions.Configuration;
1717
using Serilog.Configuration;
18+
using Serilog.Core;
1819
using Serilog.Debugging;
1920
using Serilog.Events;
2021
using Serilog.Formatting;
@@ -104,11 +105,12 @@ public static LoggerConfiguration MSSqlServer(
104105
/// <param name="sinkOptions">Supplies additional settings for the sink</param>
105106
/// <param name="sinkOptionsSection">A config section defining additional settings for the sink</param>
106107
/// <param name="appConfiguration">Additional application-level configuration. Required if connectionString is a name.</param>
107-
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
108+
/// <param name="restrictedToMinimumLevel">The minimum level for events passed through the sink. Ignored when <paramref name="levelSwitch"/> is specified.</param>
108109
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
109110
/// <param name="columnOptions">An externally-modified group of column settings</param>
110111
/// <param name="columnOptionsSection">A config section defining various column settings</param>
111112
/// <param name="logEventFormatter">Supplies custom formatter for the LogEvent column, or null</param>
113+
/// <param name="levelSwitch">A switch allowing the pass-through minimum level to be changed at runtime.</param>
112114
/// <returns>Logger configuration, allowing configuration to continue.</returns>
113115
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
114116
public static LoggerConfiguration MSSqlServer(
@@ -121,13 +123,15 @@ public static LoggerConfiguration MSSqlServer(
121123
IFormatProvider formatProvider = null,
122124
ColumnOptions columnOptions = null,
123125
IConfigurationSection columnOptionsSection = null,
124-
ITextFormatter logEventFormatter = null) =>
126+
ITextFormatter logEventFormatter = null,
127+
LoggingLevelSwitch levelSwitch = null) =>
125128
loggerConfiguration.MSSqlServerInternal(
126129
connectionString: connectionString,
127130
sinkOptions: sinkOptions,
128131
sinkOptionsSection: sinkOptionsSection,
129132
appConfiguration: appConfiguration,
130133
restrictedToMinimumLevel: restrictedToMinimumLevel,
134+
levelSwitch: levelSwitch,
131135
formatProvider: formatProvider,
132136
columnOptions: columnOptions,
133137
columnOptionsSection: columnOptionsSection,
@@ -145,6 +149,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
145149
IConfigurationSection sinkOptionsSection,
146150
IConfiguration appConfiguration,
147151
LogEventLevel restrictedToMinimumLevel,
152+
LoggingLevelSwitch levelSwitch,
148153
IFormatProvider formatProvider,
149154
ColumnOptions columnOptions,
150155
IConfigurationSection columnOptionsSection,
@@ -164,7 +169,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
164169

165170
var periodicBatchingSink = batchingSinkFactory.Create(sink, sinkOptions);
166171

167-
return loggerConfiguration.Sink(periodicBatchingSink, restrictedToMinimumLevel);
172+
return loggerConfiguration.Sink(periodicBatchingSink, restrictedToMinimumLevel, levelSwitch);
168173
}
169174

170175
/// <summary>
@@ -225,11 +230,12 @@ public static LoggerConfiguration MSSqlServer(
225230
/// <param name="sinkOptions">Supplies additional settings for the sink</param>
226231
/// <param name="sinkOptionsSection">A config section defining additional settings for the sink</param>
227232
/// <param name="appConfiguration">Additional application-level configuration. Required if connectionString is a name.</param>
228-
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
233+
/// <param name="restrictedToMinimumLevel">The minimum level for events passed through the sink. Ignored when <paramref name="levelSwitch"/> is specified.</param>
229234
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
230235
/// <param name="columnOptions">An externally-modified group of column settings</param>
231236
/// <param name="columnOptionsSection">A config section defining various column settings</param>
232237
/// <param name="logEventFormatter">Supplies custom formatter for the LogEvent column, or null</param>
238+
/// <param name="levelSwitch">A switch allowing the pass-through minimum level to be changed at runtime.</param>
233239
/// <returns>Logger configuration, allowing configuration to continue.</returns>
234240
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
235241
public static LoggerConfiguration MSSqlServer(
@@ -242,13 +248,15 @@ public static LoggerConfiguration MSSqlServer(
242248
IFormatProvider formatProvider = null,
243249
ColumnOptions columnOptions = null,
244250
IConfigurationSection columnOptionsSection = null,
245-
ITextFormatter logEventFormatter = null) =>
251+
ITextFormatter logEventFormatter = null,
252+
LoggingLevelSwitch levelSwitch = null) =>
246253
loggerAuditSinkConfiguration.MSSqlServerInternal(
247254
connectionString: connectionString,
248255
sinkOptions: sinkOptions,
249256
sinkOptionsSection: sinkOptionsSection,
250257
appConfiguration: appConfiguration,
251258
restrictedToMinimumLevel: restrictedToMinimumLevel,
259+
levelSwitch: levelSwitch,
252260
formatProvider: formatProvider,
253261
columnOptions: columnOptions,
254262
columnOptionsSection: columnOptionsSection,
@@ -265,6 +273,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
265273
IConfigurationSection sinkOptionsSection,
266274
IConfiguration appConfiguration,
267275
LogEventLevel restrictedToMinimumLevel,
276+
LoggingLevelSwitch levelSwitch,
268277
IFormatProvider formatProvider,
269278
ColumnOptions columnOptions,
270279
IConfigurationSection columnOptionsSection,
@@ -281,7 +290,7 @@ internal static LoggerConfiguration MSSqlServerInternal(
281290

282291
var auditSink = auditSinkFactory.Create(connectionString, sinkOptions, formatProvider, columnOptions, logEventFormatter);
283292

284-
return loggerAuditSinkConfiguration.Sink(auditSink, restrictedToMinimumLevel);
293+
return loggerAuditSinkConfiguration.Sink(auditSink, restrictedToMinimumLevel, levelSwitch);
285294
}
286295

287296
private static void ReadConfiguration(

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using System;
1616
using Microsoft.Extensions.Configuration;
1717
using Serilog.Configuration;
18+
using Serilog.Core;
1819
using Serilog.Events;
1920
using Serilog.Formatting;
2021
using Serilog.Sinks.MSSqlServer;
@@ -97,11 +98,12 @@ public static LoggerConfiguration MSSqlServer(
9798
/// <param name="sinkOptions">Supplies additional settings for the sink</param>
9899
/// <param name="sinkOptionsSection">A config section defining additional settings for the sink</param>
99100
/// <param name="appConfiguration">Additional application-level configuration. Required if connectionString is a name.</param>
100-
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
101+
/// <param name="restrictedToMinimumLevel">The minimum level for events passed through the sink. Ignored when <paramref name="levelSwitch"/> is specified.</param>
101102
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
102103
/// <param name="columnOptions">An externally-modified group of column settings</param>
103104
/// <param name="columnOptionsSection">A config section defining various column settings</param>
104105
/// <param name="logEventFormatter">Supplies custom formatter for the LogEvent column, or null</param>
106+
/// <param name="levelSwitch">A switch allowing the pass-through minimum level to be changed at runtime.</param>
105107
/// <returns>Logger configuration, allowing configuration to continue.</returns>
106108
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
107109
public static LoggerConfiguration MSSqlServer(
@@ -114,7 +116,8 @@ public static LoggerConfiguration MSSqlServer(
114116
IFormatProvider formatProvider = null,
115117
ColumnOptions columnOptions = null,
116118
IConfigurationSection columnOptionsSection = null,
117-
ITextFormatter logEventFormatter = null)
119+
ITextFormatter logEventFormatter = null,
120+
LoggingLevelSwitch levelSwitch = null)
118121
{
119122
if (loggerConfiguration == null)
120123
throw new ArgumentNullException(nameof(loggerConfiguration));
@@ -128,7 +131,7 @@ public static LoggerConfiguration MSSqlServer(
128131
IPeriodicBatchingSinkFactory periodicBatchingSinkFactory = new PeriodicBatchingSinkFactory();
129132
var periodicBatchingSink = periodicBatchingSinkFactory.Create(sink, sinkOptions);
130133

131-
return loggerConfiguration.Sink(periodicBatchingSink, restrictedToMinimumLevel);
134+
return loggerConfiguration.Sink(periodicBatchingSink, restrictedToMinimumLevel, levelSwitch);
132135
}
133136

134137
/// <summary>
@@ -189,11 +192,12 @@ public static LoggerConfiguration MSSqlServer(
189192
/// <param name="sinkOptions">Supplies additional settings for the sink</param>
190193
/// <param name="sinkOptionsSection">A config section defining additional settings for the sink</param>
191194
/// <param name="appConfiguration">Additional application-level configuration. Required if connectionString is a name.</param>
192-
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
195+
/// <param name="restrictedToMinimumLevel">The minimum level for events passed through the sink. Ignored when <paramref name="levelSwitch"/> is specified.</param>
193196
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
194197
/// <param name="columnOptions">An externally-modified group of column settings</param>
195198
/// <param name="columnOptionsSection">A config section defining various column settings</param>
196199
/// <param name="logEventFormatter">Supplies custom formatter for the LogEvent column, or null</param>
200+
/// <param name="levelSwitch">A switch allowing the pass-through minimum level to be changed at runtime.</param>
197201
/// <returns>Logger configuration, allowing configuration to continue.</returns>
198202
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
199203
public static LoggerConfiguration MSSqlServer(
@@ -206,7 +210,8 @@ public static LoggerConfiguration MSSqlServer(
206210
IFormatProvider formatProvider = null,
207211
ColumnOptions columnOptions = null,
208212
IConfigurationSection columnOptionsSection = null,
209-
ITextFormatter logEventFormatter = null)
213+
ITextFormatter logEventFormatter = null,
214+
LoggingLevelSwitch levelSwitch = null)
210215
{
211216
if (loggerAuditSinkConfiguration == null)
212217
throw new ArgumentNullException(nameof(loggerAuditSinkConfiguration));
@@ -217,7 +222,7 @@ public static LoggerConfiguration MSSqlServer(
217222
IMSSqlServerAuditSinkFactory auditSinkFactory = new MSSqlServerAuditSinkFactory();
218223
var auditSink = auditSinkFactory.Create(connectionString, sinkOptions, formatProvider, columnOptions, logEventFormatter);
219224

220-
return loggerAuditSinkConfiguration.Sink(auditSink, restrictedToMinimumLevel);
225+
return loggerAuditSinkConfiguration.Sink(auditSink, restrictedToMinimumLevel, levelSwitch);
221226
}
222227

223228
private static void ReadConfiguration(

0 commit comments

Comments
 (0)