public void SetLogLevel_UpdatesNamespaceDescendants() { // arrange (A* should log at Information) var provider = new DynamicLoggerProvider(GetLoggerSettings()); // act I: with original setup var childLogger = provider.CreateLogger("A.B.C"); var configurations = provider.GetLoggerConfigurations(); var tierOneNamespace = configurations.First(n => n.Name == "A"); // assert I: base namespace is in the response, correctly Assert.Equal(LogLevel.Information, tierOneNamespace.EffectiveLevel); // act II: set A.B* to log at Trace provider.SetLogLevel("A.B", LogLevel.Trace); configurations = provider.GetLoggerConfigurations(); tierOneNamespace = configurations.First(n => n.Name == "A"); var tierTwoNamespace = configurations.First(n => n.Name == "A.B"); // assert II: base hasn't changed but the one set at runtime and all descendants (including a concrete logger) have Assert.Equal(LogLevel.Information, tierOneNamespace.EffectiveLevel); Assert.Equal(LogLevel.Trace, tierTwoNamespace.EffectiveLevel); Assert.True(childLogger.IsEnabled(LogLevel.Trace)); // act III: set A to something else, make sure it inherits down provider.SetLogLevel("A", LogLevel.Error); configurations = provider.GetLoggerConfigurations(); tierOneNamespace = configurations.First(n => n.Name == "A"); tierTwoNamespace = configurations.First(n => n.Name == "A.B"); var grandchildLogger = provider.CreateLogger("A.B.C.D"); // assert again Assert.Equal(LogLevel.Error, tierOneNamespace.EffectiveLevel); Assert.Equal(LogLevel.Error, tierTwoNamespace.EffectiveLevel); Assert.False(childLogger.IsEnabled(LogLevel.Warning)); Assert.False(grandchildLogger.IsEnabled(LogLevel.Warning)); }
public void SetLogLevel_Can_Reset_to_Default() { // arrange (A* should log at Information) var provider = new DynamicLoggerProvider(GetLoggerSettings()); // act I: with original setup var firstLogger = provider.CreateLogger("A.B.C"); var configurations = provider.GetLoggerConfigurations(); var tierOneNamespace = configurations.First(n => n.Name == "A"); // assert I: base namespace is in the response, correctly Assert.Equal(LogLevel.Information, tierOneNamespace.EffectiveLevel); // act II: set A.B* to log at Trace provider.SetLogLevel("A.B", LogLevel.Trace); configurations = provider.GetLoggerConfigurations(); tierOneNamespace = configurations.First(n => n.Name == "A"); var tierTwoNamespace = configurations.First(n => n.Name == "A.B"); // assert II: base hasn't changed but the one set at runtime and all descendants (including a concrete logger) have Assert.Equal(LogLevel.Information, tierOneNamespace.EffectiveLevel); Assert.Equal(LogLevel.Trace, tierTwoNamespace.EffectiveLevel); Assert.True(firstLogger.IsEnabled(LogLevel.Trace)); // act III: reset A.B provider.SetLogLevel("A.B", null); configurations = provider.GetLoggerConfigurations(); tierOneNamespace = configurations.First(n => n.Name == "A"); tierTwoNamespace = configurations.First(n => n.Name == "A.B"); var secondLogger = provider.CreateLogger("A.B.C.D"); // assert again Assert.Equal(LogLevel.Information, tierOneNamespace.EffectiveLevel); Assert.Equal(LogLevel.Information, tierTwoNamespace.EffectiveLevel); Assert.True(firstLogger.IsEnabled(LogLevel.Information)); Assert.True(secondLogger.IsEnabled(LogLevel.Information)); }