Skip to content
This repository was archived by the owner on May 17, 2019. It is now read-only.

Commit a81a9eb

Browse files
author
Tim Hess
committed
Use a different alias for Dynamic provider so we control the min level. Filter the filterOptions so that only applicable filters are applied [fixes #152855242]
1 parent d3fb935 commit a81a9eb

File tree

2 files changed

+63
-2
lines changed

2 files changed

+63
-2
lines changed

src/Steeltoe.Extensions.Logging.DynamicLogger/DynamicLoggerProvider.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
namespace Steeltoe.Extensions.Logging
2424
{
25-
[ProviderAlias("Console")]
25+
[ProviderAlias("Dynamic")]
2626
public class DynamicLoggerProvider : IDynamicLoggerProvider
2727
{
2828
private Func<string, LogLevel, bool> _filter;
@@ -198,7 +198,7 @@ public void SetLogLevel(string category, LogLevel? level)
198198

199199
private void SetFiltersFromOptions()
200200
{
201-
foreach (var rule in _filterOptions.CurrentValue.Rules)
201+
foreach (var rule in _filterOptions.CurrentValue.Rules.Where(p => string.IsNullOrEmpty(p.ProviderName) || p.ProviderName == "Console"))
202202
{
203203
if (rule.CategoryName == "Default" || string.IsNullOrEmpty(rule.CategoryName))
204204
{
@@ -285,6 +285,8 @@ private Func<string, LogLevel, bool> GetFilter(string name)
285285
return _runningFilters.First(f => f.Key == prefix).Value;
286286
}
287287
}
288+
289+
return _filter;
288290
}
289291

290292
// check if there are any applicable settings

test/Steeltoe.Extensions.Logging.DynamicLogger.Test/DynamicLoggingBuilderTest.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,69 @@ public class DynamicLoggingBuilderTest
2626
{
2727
["Logging:IncludeScopes"] = "false",
2828
["Logging:Console:LogLevel:Default"] = "Information",
29+
["Logging:Console:LogLevel:A.B.C.D"] = "Critical",
2930
["Logging:LogLevel:Steeltoe.Extensions.Logging.Test"] = "Information",
3031
["Logging:LogLevel:Default"] = "Warning"
3132
};
3233

34+
[Fact]
35+
public void OnlyApplicableFilters_AreApplied()
36+
{
37+
// arrange
38+
var _appsettings = new Dictionary<string, string>()
39+
{
40+
["Logging:IncludeScopes"] = "false",
41+
["Logging:LogLevel:Default"] = "Information",
42+
["Logging:foo:LogLevel:A.B.C.D.TestClass"] = "None"
43+
};
44+
var configuration = new ConfigurationBuilder().AddInMemoryCollection(_appsettings).Build();
45+
var services = new ServiceCollection()
46+
.AddLogging(builder =>
47+
{
48+
builder.AddConfiguration(configuration.GetSection("Logging"));
49+
builder.AddDynamicConsole();
50+
})
51+
.BuildServiceProvider();
52+
53+
// act
54+
var logger = services.GetService(typeof(ILogger<A.B.C.D.TestClass>)) as ILogger<A.B.C.D.TestClass>;
55+
56+
// assert
57+
Assert.NotNull(logger);
58+
Assert.True((logger).IsEnabled(LogLevel.Information), "Information level should be enabled");
59+
Assert.False((logger).IsEnabled(LogLevel.Debug), "Debug level should NOT be enabled");
60+
}
61+
62+
[Fact]
63+
public void DynamicLevelSetting_WorksWith_ConsoleFilters()
64+
{
65+
// arrange
66+
var configuration = new ConfigurationBuilder().AddInMemoryCollection(appsettings).Build();
67+
var services = new ServiceCollection()
68+
.AddLogging(builder =>
69+
{
70+
builder.AddConfiguration(configuration.GetSection("Logging"));
71+
builder.AddDynamicConsole();
72+
})
73+
.BuildServiceProvider();
74+
75+
// act
76+
var logger = services.GetService(typeof(ILogger<A.B.C.D.TestClass>)) as ILogger<A.B.C.D.TestClass>;
77+
78+
// assert
79+
Assert.NotNull(logger);
80+
Assert.True((logger).IsEnabled(LogLevel.Critical), "Critical level should be enabled");
81+
Assert.False((logger).IsEnabled(LogLevel.Error), "Error level should NOT be enabled");
82+
Assert.False((logger).IsEnabled(LogLevel.Warning), "Warning level should NOT be enabled");
83+
Assert.False((logger).IsEnabled(LogLevel.Debug), "Debug level should NOT be enabled");
84+
Assert.False((logger).IsEnabled(LogLevel.Trace), "Trace level should NOT be enabled yet");
85+
86+
// change the log level and confirm it worked
87+
var provider = services.GetRequiredService(typeof(ILoggerProvider)) as DynamicLoggerProvider;
88+
provider.SetLogLevel("A.B.C.D", LogLevel.Trace);
89+
Assert.True((logger).IsEnabled(LogLevel.Trace), "Trace level should have been enabled");
90+
}
91+
3392
[Fact]
3493
public void AddConsole_Works_WithAddConfiguration()
3594
{

0 commit comments

Comments
 (0)