From 5dec5fdab4f720d81cb73d30b3b64d07324145cc Mon Sep 17 00:00:00 2001 From: Sergey Komisarchik Date: Mon, 7 Jan 2019 21:27:47 +0300 Subject: [PATCH] added new ReadFrom.Configuration(...) overloads; marked old as obsolete --- ...figurationLoggerConfigurationExtensions.cs | 47 +++++++++++++++++-- .../LoggerConfigurationExtensionsTests.cs | 29 ++++++++++++ 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs b/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs index 47da7f0..11e3440 100644 --- a/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs +++ b/src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs @@ -32,21 +32,24 @@ public static class ConfigurationLoggerConfigurationExtensions public const string DefaultSectionName = "Serilog"; /// - /// Reads logger settings from the provided configuration object using the default section name. Generally this + /// Reads logger settings from the provided configuration object using the provided section name. Generally this /// is preferable over the other method that takes a configuration section. Only this version will populate /// IConfiguration parameters on target methods. /// /// Logger setting configuration. /// A configuration object which contains a Serilog section. + /// A section name for section which contains a Serilog section. /// The dependency context from which sink/enricher packages can be located. If not supplied, the platform /// default will be used. /// An object allowing configuration to continue. public static LoggerConfiguration Configuration( this LoggerSettingsConfiguration settingConfiguration, IConfiguration configuration, + string sectionName, DependencyContext dependencyContext = null) { if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + if (sectionName == null) throw new ArgumentNullException(nameof(sectionName)); var assemblyFinder = dependencyContext == null ? AssemblyFinder.Auto() @@ -54,11 +57,27 @@ public static LoggerConfiguration Configuration( return settingConfiguration.Settings( new ConfigurationReader( - configuration.GetSection(DefaultSectionName), + configuration.GetSection(sectionName), assemblyFinder, configuration)); } + /// + /// Reads logger settings from the provided configuration object using the default section name. Generally this + /// is preferable over the other method that takes a configuration section. Only this version will populate + /// IConfiguration parameters on target methods. + /// + /// Logger setting configuration. + /// A configuration object which contains a Serilog section. + /// The dependency context from which sink/enricher packages can be located. If not supplied, the platform + /// default will be used. + /// An object allowing configuration to continue. + public static LoggerConfiguration Configuration( + this LoggerSettingsConfiguration settingConfiguration, + IConfiguration configuration, + DependencyContext dependencyContext = null) + => Configuration(settingConfiguration, configuration, DefaultSectionName, dependencyContext); + /// /// Reads logger settings from the provided configuration section. Generally it is preferable to use the other /// extension method that takes the full configuration object. @@ -68,6 +87,7 @@ public static LoggerConfiguration Configuration( /// The dependency context from which sink/enricher packages can be located. If not supplied, the platform /// default will be used. /// An object allowing configuration to continue. + [Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, DependencyContext dependencyContext) instead.")] public static LoggerConfiguration ConfigurationSection( this LoggerSettingsConfiguration settingConfiguration, IConfigurationSection configSection, @@ -88,26 +108,44 @@ public static LoggerConfiguration ConfigurationSection( } /// - /// Reads logger settings from the provided configuration object using the default section name. Generally this + /// Reads logger settings from the provided configuration object using the provided section name. Generally this /// is preferable over the other method that takes a configuration section. Only this version will populate /// IConfiguration parameters on target methods. /// /// Logger setting configuration. /// A configuration object which contains a Serilog section. + /// A section name for section which contains a Serilog section. /// Defines how the package identifies assemblies to scan for sinks and other Types. /// An object allowing configuration to continue. public static LoggerConfiguration Configuration( this LoggerSettingsConfiguration settingConfiguration, IConfiguration configuration, + string sectionName, ConfigurationAssemblySource configurationAssemblySource) { if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + if (sectionName == null) throw new ArgumentNullException(nameof(sectionName)); var assemblyFinder = AssemblyFinder.ForSource(configurationAssemblySource); - return settingConfiguration.Settings(new ConfigurationReader(configuration.GetSection(DefaultSectionName), assemblyFinder, configuration)); + return settingConfiguration.Settings(new ConfigurationReader(configuration.GetSection(sectionName), assemblyFinder, configuration)); } + /// + /// Reads logger settings from the provided configuration object using the default section name. Generally this + /// is preferable over the other method that takes a configuration section. Only this version will populate + /// IConfiguration parameters on target methods. + /// + /// Logger setting configuration. + /// A configuration object which contains a Serilog section. + /// Defines how the package identifies assemblies to scan for sinks and other Types. + /// An object allowing configuration to continue. + public static LoggerConfiguration Configuration( + this LoggerSettingsConfiguration settingConfiguration, + IConfiguration configuration, + ConfigurationAssemblySource configurationAssemblySource) + => Configuration(settingConfiguration, configuration, DefaultSectionName, configurationAssemblySource); + /// /// Reads logger settings from the provided configuration section. Generally it is preferable to use the other /// extension method that takes the full configuration object. @@ -116,6 +154,7 @@ public static LoggerConfiguration Configuration( /// The Serilog configuration section /// Defines how the package identifies assemblies to scan for sinks and other Types. /// An object allowing configuration to continue. + [Obsolete("Use ReadFrom.Configuration(IConfiguration configuration, string sectionName, ConfigurationAssemblySource configurationAssemblySource) instead.")] public static LoggerConfiguration ConfigurationSection( this LoggerSettingsConfiguration settingConfiguration, IConfigurationSection configSection, diff --git a/test/Serilog.Settings.Configuration.Tests/LoggerConfigurationExtensionsTests.cs b/test/Serilog.Settings.Configuration.Tests/LoggerConfigurationExtensionsTests.cs index 28b7d90..e2f679e 100644 --- a/test/Serilog.Settings.Configuration.Tests/LoggerConfigurationExtensionsTests.cs +++ b/test/Serilog.Settings.Configuration.Tests/LoggerConfigurationExtensionsTests.cs @@ -35,8 +35,10 @@ public void ReadFromConfigurationSectionReadsFromAnArbitrarySection() .AddJsonString(json) .Build(); +#pragma warning disable CS0618 // Type or member is obsolete var log = new LoggerConfiguration() .ReadFrom.ConfigurationSection(config.GetSection("NotSerilog")) +#pragma warning restore CS0618 // Type or member is obsolete .WriteTo.Sink(new DelegatingSink(e => evt = e)) .CreateLogger(); @@ -65,8 +67,10 @@ public void ReadFromConfigurationSectionThrowsWhenTryingToCallConfigurationMetho .Build(); var exception = Assert.Throws(() => +#pragma warning disable CS0618 // Type or member is obsolete new LoggerConfiguration() .ReadFrom.ConfigurationSection(config.GetSection("NotSerilog")) +#pragma warning restore CS0618 // Type or member is obsolete .CreateLogger()); Assert.Equal("Trying to invoke a configuration method accepting a `IConfiguration` argument. " + @@ -76,6 +80,29 @@ public void ReadFromConfigurationSectionThrowsWhenTryingToCallConfigurationMetho } + [Fact] + public void ReadFromConfigurationDoesNotThrowWhenTryingToCallConfigurationMethodWithIConfigurationParam() + { + var json = @"{ + ""NotSerilog"": { + ""Using"": [""TestDummies""], + ""WriteTo"": [{ + ""Name"": ""DummyWithConfiguration"", + ""Args"": {} + }] + } + }"; + + var config = new ConfigurationBuilder() + .AddJsonString(json) + .Build(); + + var exception = new LoggerConfiguration() + .ReadFrom.Configuration(config, "NotSerilog") + .CreateLogger(); + + } + [Fact] [Trait("BugFix", "https://github.com/serilog/serilog-settings-configuration/issues/143")] public void ReadFromConfigurationSectionDoesNotThrowWhenTryingToCallConfigurationMethodWithOptionalIConfigurationParam() @@ -95,8 +122,10 @@ public void ReadFromConfigurationSectionDoesNotThrowWhenTryingToCallConfiguratio .Build(); // this should not throw because DummyWithOptionalConfiguration accepts an optional config +#pragma warning disable CS0618 // Type or member is obsolete new LoggerConfiguration() .ReadFrom.ConfigurationSection(config.GetSection("NotSerilog")) +#pragma warning restore CS0618 // Type or member is obsolete .CreateLogger(); }