Skip to content

Commit b4adf75

Browse files
authored
Merge pull request #163 from skomis-mm/issue148
Added new ReadFrom.Configuration(...) overloads; Marked old as obsolete (#148)
2 parents 5a466f5 + 5dec5fd commit b4adf75

File tree

2 files changed

+72
-4
lines changed

2 files changed

+72
-4
lines changed

src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,53 @@ public static class ConfigurationLoggerConfigurationExtensions
3232
public const string DefaultSectionName = "Serilog";
3333

3434
/// <summary>
35-
/// Reads logger settings from the provided configuration object using the default section name. Generally this
35+
/// Reads logger settings from the provided configuration object using the provided section name. Generally this
3636
/// is preferable over the other method that takes a configuration section. Only this version will populate
3737
/// IConfiguration parameters on target methods.
3838
/// </summary>
3939
/// <param name="settingConfiguration">Logger setting configuration.</param>
4040
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
41+
/// <param name="sectionName">A section name for section which contains a Serilog section.</param>
4142
/// <param name="dependencyContext">The dependency context from which sink/enricher packages can be located. If not supplied, the platform
4243
/// default will be used.</param>
4344
/// <returns>An object allowing configuration to continue.</returns>
4445
public static LoggerConfiguration Configuration(
4546
this LoggerSettingsConfiguration settingConfiguration,
4647
IConfiguration configuration,
48+
string sectionName,
4749
DependencyContext dependencyContext = null)
4850
{
4951
if (settingConfiguration == null) throw new ArgumentNullException(nameof(settingConfiguration));
5052
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
53+
if (sectionName == null) throw new ArgumentNullException(nameof(sectionName));
5154

5255
var assemblyFinder = dependencyContext == null
5356
? AssemblyFinder.Auto()
5457
: AssemblyFinder.ForDependencyContext(dependencyContext);
5558

5659
return settingConfiguration.Settings(
5760
new ConfigurationReader(
58-
configuration.GetSection(DefaultSectionName),
61+
configuration.GetSection(sectionName),
5962
assemblyFinder,
6063
configuration));
6164
}
6265

66+
/// <summary>
67+
/// Reads logger settings from the provided configuration object using the default section name. Generally this
68+
/// is preferable over the other method that takes a configuration section. Only this version will populate
69+
/// IConfiguration parameters on target methods.
70+
/// </summary>
71+
/// <param name="settingConfiguration">Logger setting configuration.</param>
72+
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
73+
/// <param name="dependencyContext">The dependency context from which sink/enricher packages can be located. If not supplied, the platform
74+
/// default will be used.</param>
75+
/// <returns>An object allowing configuration to continue.</returns>
76+
public static LoggerConfiguration Configuration(
77+
this LoggerSettingsConfiguration settingConfiguration,
78+
IConfiguration configuration,
79+
DependencyContext dependencyContext = null)
80+
=> Configuration(settingConfiguration, configuration, DefaultSectionName, dependencyContext);
81+
6382
/// <summary>
6483
/// Reads logger settings from the provided configuration section. Generally it is preferable to use the other
6584
/// extension method that takes the full configuration object.
@@ -69,6 +88,7 @@ public static LoggerConfiguration Configuration(
6988
/// <param name="dependencyContext">The dependency context from which sink/enricher packages can be located. If not supplied, the platform
7089
/// default will be used.</param>
7190
/// <returns>An object allowing configuration to continue.</returns>
91+
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, DependencyContext dependencyContext) instead.")]
7292
public static LoggerConfiguration ConfigurationSection(
7393
this LoggerSettingsConfiguration settingConfiguration,
7494
IConfigurationSection configSection,
@@ -89,27 +109,45 @@ public static LoggerConfiguration ConfigurationSection(
89109
}
90110

91111
/// <summary>
92-
/// Reads logger settings from the provided configuration object using the default section name. Generally this
112+
/// Reads logger settings from the provided configuration object using the provided section name. Generally this
93113
/// is preferable over the other method that takes a configuration section. Only this version will populate
94114
/// IConfiguration parameters on target methods.
95115
/// </summary>
96116
/// <param name="settingConfiguration">Logger setting configuration.</param>
97117
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
118+
/// <param name="sectionName">A section name for section which contains a Serilog section.</param>
98119
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other Types.</param>
99120
/// <returns>An object allowing configuration to continue.</returns>
100121
public static LoggerConfiguration Configuration(
101122
this LoggerSettingsConfiguration settingConfiguration,
102123
IConfiguration configuration,
124+
string sectionName,
103125
ConfigurationAssemblySource configurationAssemblySource)
104126
{
105127
if (settingConfiguration == null) throw new ArgumentNullException(nameof(settingConfiguration));
106128
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
129+
if (sectionName == null) throw new ArgumentNullException(nameof(sectionName));
107130

108131
var assemblyFinder = AssemblyFinder.ForSource(configurationAssemblySource);
109132

110-
return settingConfiguration.Settings(new ConfigurationReader(configuration.GetSection(DefaultSectionName), assemblyFinder, configuration));
133+
return settingConfiguration.Settings(new ConfigurationReader(configuration.GetSection(sectionName), assemblyFinder, configuration));
111134
}
112135

136+
/// <summary>
137+
/// Reads logger settings from the provided configuration object using the default section name. Generally this
138+
/// is preferable over the other method that takes a configuration section. Only this version will populate
139+
/// IConfiguration parameters on target methods.
140+
/// </summary>
141+
/// <param name="settingConfiguration">Logger setting configuration.</param>
142+
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
143+
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other Types.</param>
144+
/// <returns>An object allowing configuration to continue.</returns>
145+
public static LoggerConfiguration Configuration(
146+
this LoggerSettingsConfiguration settingConfiguration,
147+
IConfiguration configuration,
148+
ConfigurationAssemblySource configurationAssemblySource)
149+
=> Configuration(settingConfiguration, configuration, DefaultSectionName, configurationAssemblySource);
150+
113151
/// <summary>
114152
/// Reads logger settings from the provided configuration section. Generally it is preferable to use the other
115153
/// extension method that takes the full configuration object.
@@ -118,6 +156,7 @@ public static LoggerConfiguration Configuration(
118156
/// <param name="configSection">The Serilog configuration section</param>
119157
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other Types.</param>
120158
/// <returns>An object allowing configuration to continue.</returns>
159+
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, ConfigurationAssemblySource configurationAssemblySource) instead.")]
121160
public static LoggerConfiguration ConfigurationSection(
122161
this LoggerSettingsConfiguration settingConfiguration,
123162
IConfigurationSection configSection,

test/Serilog.Settings.Configuration.Tests/LoggerConfigurationExtensionsTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ public void ReadFromConfigurationSectionReadsFromAnArbitrarySection()
3535
.AddJsonString(json)
3636
.Build();
3737

38+
#pragma warning disable CS0618 // Type or member is obsolete
3839
var log = new LoggerConfiguration()
3940
.ReadFrom.ConfigurationSection(config.GetSection("NotSerilog"))
41+
#pragma warning restore CS0618 // Type or member is obsolete
4042
.WriteTo.Sink(new DelegatingSink(e => evt = e))
4143
.CreateLogger();
4244

@@ -65,8 +67,10 @@ public void ReadFromConfigurationSectionThrowsWhenTryingToCallConfigurationMetho
6567
.Build();
6668

6769
var exception = Assert.Throws<InvalidOperationException>(() =>
70+
#pragma warning disable CS0618 // Type or member is obsolete
6871
new LoggerConfiguration()
6972
.ReadFrom.ConfigurationSection(config.GetSection("NotSerilog"))
73+
#pragma warning restore CS0618 // Type or member is obsolete
7074
.CreateLogger());
7175

7276
Assert.Equal("Trying to invoke a configuration method accepting a `IConfiguration` argument. " +
@@ -76,6 +80,29 @@ public void ReadFromConfigurationSectionThrowsWhenTryingToCallConfigurationMetho
7680

7781
}
7882

83+
[Fact]
84+
public void ReadFromConfigurationDoesNotThrowWhenTryingToCallConfigurationMethodWithIConfigurationParam()
85+
{
86+
var json = @"{
87+
""NotSerilog"": {
88+
""Using"": [""TestDummies""],
89+
""WriteTo"": [{
90+
""Name"": ""DummyWithConfiguration"",
91+
""Args"": {}
92+
}]
93+
}
94+
}";
95+
96+
var config = new ConfigurationBuilder()
97+
.AddJsonString(json)
98+
.Build();
99+
100+
var exception = new LoggerConfiguration()
101+
.ReadFrom.Configuration(config, "NotSerilog")
102+
.CreateLogger();
103+
104+
}
105+
79106
[Fact]
80107
[Trait("BugFix", "https://github.com/serilog/serilog-settings-configuration/issues/143")]
81108
public void ReadFromConfigurationSectionDoesNotThrowWhenTryingToCallConfigurationMethodWithOptionalIConfigurationParam()
@@ -95,8 +122,10 @@ public void ReadFromConfigurationSectionDoesNotThrowWhenTryingToCallConfiguratio
95122
.Build();
96123

97124
// this should not throw because DummyWithOptionalConfiguration accepts an optional config
125+
#pragma warning disable CS0618 // Type or member is obsolete
98126
new LoggerConfiguration()
99127
.ReadFrom.ConfigurationSection(config.GetSection("NotSerilog"))
128+
#pragma warning restore CS0618 // Type or member is obsolete
100129
.CreateLogger();
101130

102131
}

0 commit comments

Comments
 (0)