public SerilogOptions(IConfiguration configuration) { var section = configuration.GetSection(ConfigPath); section.Bind(this); if (MinimumLevel == null) { MinimumLevel = new MinimumLevel() { Default = LogEventLevel.Verbose, // Set root to verbose to have sub loggers work at all levels Override = new Dictionary <string, LogEventLevel>() }; } if (SubloggerConfigKeyExclusions == null) { SubloggerConfigKeyExclusions = new List <string> { "WriteTo", "MinimumLevel" }; } }
// Capture Serilog configuration provided programmatically using reflection public void SetSerilogOptions(Serilog.LoggerConfiguration loggerConfiguration) { var minLevelProperty = loggerConfiguration.GetType().GetField("_minimumLevel", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var minimumLevel = (LogEventLevel)minLevelProperty.GetValue(loggerConfiguration); var overridesProperty = loggerConfiguration.GetType().GetField("_overrides", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var overrideSwitches = (Dictionary <string, Serilog.Core.LoggingLevelSwitch>)overridesProperty.GetValue(loggerConfiguration); Dictionary <string, LogEventLevel> overrideLevels = new (); foreach (var overrideSwitch in overrideSwitches) { overrideLevels.Add(overrideSwitch.Key, overrideSwitch.Value.MinimumLevel); } MinimumLevel = new MinimumLevel() { Default = minimumLevel, Override = overrideLevels ?? new Dictionary <string, LogEventLevel>() }; _serilogConfiguration = loggerConfiguration.ClearLevels(MinimumLevel); }
public void SetSerilogOptions(IConfiguration configuration) { var section = configuration.GetSection(ConfigPath); section.Bind(this); if (MinimumLevel == null || MinimumLevel.Default == (LogEventLevel)(-1)) { var defaultLevel = LogEventLevel.Information; var strMinLevel = section.GetValue <string>("MinimumLevel"); if (!string.IsNullOrEmpty(strMinLevel)) { Enum.TryParse(strMinLevel, out defaultLevel); } MinimumLevel = new MinimumLevel() { Default = defaultLevel, }; } MinimumLevel.Override ??= new Dictionary <string, LogEventLevel>(); _serilogConfiguration = new LoggerConfiguration().ReadFrom.Configuration(configuration).ClearLevels(MinimumLevel); }
/// <summary> /// Clear all the levels from serilog configuration. This extension is used to clear the levels in serilog, after capturing them into steeltoe config /// and using steeltoe config to control the verbosity. /// </summary> /// <param name="loggerConfiguration">The <see cref="LoggerConfiguration"/></param> /// <param name="minimumLevel">The Steeltoe <see cref="MinimumLevel"/></param> /// <returns>The <see cref="LoggerConfiguration"/> that is cleared</returns> internal static LoggerConfiguration ClearLevels(this LoggerConfiguration loggerConfiguration, MinimumLevel minimumLevel) { foreach (var overrideLevel in minimumLevel.Override) { loggerConfiguration.MinimumLevel.Override(overrideLevel.Key, Serilog.Events.LogEventLevel.Verbose); } return(loggerConfiguration.MinimumLevel.Verbose()); }