Skip to content

Commit ca71216

Browse files
authored
Merge pull request #310 from 0xced/ExplicitConfigurationAssemblies
Add an overload of the `Configuration` method that explicitly accepts configuration assemblies
2 parents 406efa6 + 7a79530 commit ca71216

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

README.md

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,26 @@ var logger = new LoggerConfiguration()
111111
.CreateLogger();
112112
```
113113

114+
Alternatively, you can also pass an array of configuration assemblies:
115+
116+
```csharp
117+
var configurationAssemblies = new[]
118+
{
119+
typeof(ConsoleLoggerConfigurationExtensions).Assembly,
120+
typeof(FileLoggerConfigurationExtensions).Assembly,
121+
};
122+
var logger = new LoggerConfiguration()
123+
.ReadFrom.Configuration(configuration, configurationAssemblies)
124+
.CreateLogger();
125+
```
126+
114127
For legacy .NET Framework projects it also scans default probing path(s).
115128

116129
For all other cases, as well as in the case of non-conventional configuration assembly names **DO** use [Using](#using-section-and-auto-discovery-of-configuration-assemblies) section.
117130

118-
#### .NET 5.0 Single File Applications
131+
#### .NET 5.0 onwards Single File Applications
119132

120-
Currently, auto-discovery of configuration assemblies is not supported in bundled mode. **DO** use [Using](#using-section-and-auto-discovery-of-configuration-assemblies) section for workaround.
133+
Currently, auto-discovery of configuration assemblies is not supported in bundled mode. **DO** use [Using](#using-section-and-auto-discovery-of-configuration-assemblies) section or explicitly pass a collection of configuration assemblies for workaround.
121134

122135
### MinimumLevel, LevelSwitches, overrides and dynamic reload
123136

src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
using System;
16+
using System.Reflection;
1617
using Microsoft.Extensions.Configuration;
1718
using Microsoft.Extensions.DependencyModel;
1819
using Serilog.Configuration;
@@ -116,7 +117,7 @@ public static LoggerConfiguration ConfigurationSection(
116117
/// <param name="settingConfiguration">Logger setting configuration.</param>
117118
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
118119
/// <param name="sectionName">A section name for section which contains a Serilog section.</param>
119-
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other Types.</param>
120+
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other types.</param>
120121
/// <returns>An object allowing configuration to continue.</returns>
121122
public static LoggerConfiguration Configuration(
122123
this LoggerSettingsConfiguration settingConfiguration,
@@ -140,7 +141,7 @@ public static LoggerConfiguration Configuration(
140141
/// </summary>
141142
/// <param name="settingConfiguration">Logger setting configuration.</param>
142143
/// <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+
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other types.</param>
144145
/// <returns>An object allowing configuration to continue.</returns>
145146
public static LoggerConfiguration Configuration(
146147
this LoggerSettingsConfiguration settingConfiguration,
@@ -154,7 +155,7 @@ public static LoggerConfiguration Configuration(
154155
/// </summary>
155156
/// <param name="settingConfiguration">Logger setting configuration.</param>
156157
/// <param name="configSection">The Serilog configuration section</param>
157-
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other Types.</param>
158+
/// <param name="configurationAssemblySource">Defines how the package identifies assemblies to scan for sinks and other types.</param>
158159
/// <returns>An object allowing configuration to continue.</returns>
159160
[Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, ConfigurationAssemblySource configurationAssemblySource) instead.")]
160161
public static LoggerConfiguration ConfigurationSection(
@@ -169,5 +170,39 @@ public static LoggerConfiguration ConfigurationSection(
169170

170171
return settingConfiguration.Settings(new ConfigurationReader(configSection, assemblyFinder, configuration: null));
171172
}
173+
174+
/// <summary>
175+
/// Reads logger settings from the provided configuration object using the provided section name.
176+
/// </summary>
177+
/// <param name="settingConfiguration">Logger setting configuration.</param>
178+
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
179+
/// <param name="sectionName">A section name for section which contains a Serilog section.</param>
180+
/// <param name="assemblies">A collection of assemblies that contains sinks and other types.</param>
181+
/// <returns>An object allowing configuration to continue.</returns>
182+
public static LoggerConfiguration Configuration(
183+
this LoggerSettingsConfiguration settingConfiguration,
184+
IConfiguration configuration,
185+
string sectionName,
186+
params Assembly[] assemblies)
187+
{
188+
if (settingConfiguration == null) throw new ArgumentNullException(nameof(settingConfiguration));
189+
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
190+
if (sectionName == null) throw new ArgumentNullException(nameof(sectionName));
191+
192+
return settingConfiguration.Settings(new ConfigurationReader(configuration.GetSection(sectionName), assemblies, new ResolutionContext(configuration)));
193+
}
194+
195+
/// <summary>
196+
/// Reads logger settings from the provided configuration object using the default section name.
197+
/// </summary>
198+
/// <param name="settingConfiguration">Logger setting configuration.</param>
199+
/// <param name="configuration">A configuration object which contains a Serilog section.</param>
200+
/// <param name="assemblies">A collection of assemblies that contains sinks and other types.</param>
201+
/// <returns>An object allowing configuration to continue.</returns>
202+
public static LoggerConfiguration Configuration(
203+
this LoggerSettingsConfiguration settingConfiguration,
204+
IConfiguration configuration,
205+
params Assembly[] assemblies)
206+
=> Configuration(settingConfiguration, configuration, DefaultSectionName, assemblies);
172207
}
173208
}

0 commit comments

Comments
 (0)