Skip to content

Commit 8736256

Browse files
authored
Merge pull request #362 from sungam3r/section
Allow configuration from contents of Serilog section
2 parents 679ce35 + 058cb9d commit 8736256

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

src/Serilog.Settings.Configuration/ConfigurationLoggerConfigurationExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,20 +228,20 @@ public static LoggerConfiguration Configuration(
228228
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, DependencyContext dependencyContext)
229229
{
230230
var assemblyFinder = dependencyContext == null ? AssemblyFinder.Auto() : AssemblyFinder.ForDependencyContext(dependencyContext);
231-
var section = configuration.GetSection(readerOptions.SectionName);
231+
var section = string.IsNullOrWhiteSpace(readerOptions.SectionName) ? configuration : configuration.GetSection(readerOptions.SectionName);
232232
return new ConfigurationReader(section, assemblyFinder, readerOptions, configuration);
233233
}
234234

235235
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, ConfigurationAssemblySource source)
236236
{
237237
var assemblyFinder = AssemblyFinder.ForSource(source);
238-
var section = configuration.GetSection(readerOptions.SectionName);
238+
var section = string.IsNullOrWhiteSpace(readerOptions.SectionName) ? configuration : configuration.GetSection(readerOptions.SectionName);
239239
return new ConfigurationReader(section, assemblyFinder, readerOptions, configuration);
240240
}
241241

242242
static ConfigurationReader GetConfigurationReader(IConfiguration configuration, ConfigurationReaderOptions readerOptions, IReadOnlyCollection<Assembly> assemblies)
243243
{
244-
var section = configuration.GetSection(readerOptions.SectionName);
244+
var section = string.IsNullOrWhiteSpace(readerOptions.SectionName) ? configuration : configuration.GetSection(readerOptions.SectionName);
245245
return new ConfigurationReader(section, assemblies, new ResolutionContext(configuration, readerOptions));
246246
}
247247
}

src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ class ConfigurationReader : IConfigurationReader
1717
{
1818
const string LevelSwitchNameRegex = @"^\${0,1}[A-Za-z]+[A-Za-z0-9]*$";
1919

20-
readonly IConfigurationSection _section;
20+
readonly IConfiguration _section;
2121
readonly IReadOnlyCollection<Assembly> _configurationAssemblies;
2222
readonly ResolutionContext _resolutionContext;
2323
readonly IConfigurationRoot _configurationRoot;
2424

25-
public ConfigurationReader(IConfigurationSection configSection, AssemblyFinder assemblyFinder, ConfigurationReaderOptions readerOptions, IConfiguration configuration = null)
25+
public ConfigurationReader(IConfiguration configSection, AssemblyFinder assemblyFinder, ConfigurationReaderOptions readerOptions, IConfiguration configuration = null)
2626
{
2727
_section = configSection ?? throw new ArgumentNullException(nameof(configSection));
2828
_configurationAssemblies = LoadConfigurationAssemblies(_section, assemblyFinder);
@@ -31,7 +31,7 @@ public ConfigurationReader(IConfigurationSection configSection, AssemblyFinder a
3131
}
3232

3333
// Used internally for processing nested configuration sections -- see GetMethodCalls below.
34-
internal ConfigurationReader(IConfigurationSection configSection, IReadOnlyCollection<Assembly> configurationAssemblies, ResolutionContext resolutionContext)
34+
internal ConfigurationReader(IConfiguration configSection, IReadOnlyCollection<Assembly> configurationAssemblies, ResolutionContext resolutionContext)
3535
{
3636
_section = configSection ?? throw new ArgumentNullException(nameof(configSection));
3737
_configurationAssemblies = configurationAssemblies ?? throw new ArgumentNullException(nameof(configurationAssemblies));
@@ -298,7 +298,7 @@ void ApplyEnrichment(LoggerConfiguration loggerConfiguration)
298298
}
299299
}
300300

301-
internal ILookup<string, Dictionary<string, IConfigurationArgumentValue>> GetMethodCalls(IConfigurationSection directive)
301+
internal ILookup<string, Dictionary<string, IConfigurationArgumentValue>> GetMethodCalls(IConfiguration directive)
302302
{
303303
var children = directive.GetChildren().ToList();
304304

@@ -356,7 +356,7 @@ internal static IConfigurationArgumentValue GetArgumentValue(IConfigurationSecti
356356
return argumentValue;
357357
}
358358

359-
static IReadOnlyCollection<Assembly> LoadConfigurationAssemblies(IConfigurationSection section, AssemblyFinder assemblyFinder)
359+
static IReadOnlyCollection<Assembly> LoadConfigurationAssemblies(IConfiguration section, AssemblyFinder assemblyFinder)
360360
{
361361
var serilogAssembly = typeof(ILogger).Assembly;
362362
var assemblies = new Dictionary<string, Assembly> { [serilogAssembly.FullName] = serilogAssembly };

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,31 @@ public void PropertyEnrichmentIsApplied()
5656
Assert.Equal("Test", evt.Properties["App"].LiteralValue());
5757
}
5858

59+
[Theory]
60+
[InlineData(null)]
61+
[InlineData("")]
62+
public void CanReadWithoutSerilogSection(string sectionName)
63+
{
64+
LogEvent evt = null;
65+
66+
var json = """
67+
{
68+
"Properties": {
69+
"App": "Test"
70+
}
71+
}
72+
""";
73+
74+
var log = ConfigFromJson(json, options: new ConfigurationReaderOptions { SectionName = sectionName })
75+
.WriteTo.Sink(new DelegatingSink(e => evt = e))
76+
.CreateLogger();
77+
78+
log.Information("Has a test property");
79+
80+
Assert.NotNull(evt);
81+
Assert.Equal("Test", evt.Properties["App"].LiteralValue());
82+
}
83+
5984
[Theory]
6085
[InlineData("extended syntax", """
6186
{

0 commit comments

Comments
 (0)