使用app.config中配置的LoggingLevelSwitch在运行时切换级别

时间:2018-03-30 15:25:17

标签: c# logging serilog

我正在尝试在运行时实现日志级别切换。如果我从下面的代码配置它,使用SeriLog的LoggingLevelSwitch工作正常。

var levelSwitch = new LoggingLevelSwitch(LogEventLevel.Verbose);
var logger = new LoggerConfiguration()
    .ReadFrom.AppSettings()
    .MinimumLevel.ControlledBy(levelSwitch)
    .CreateLogger();
logger.Verbose("This gets logged.");
levelSwitch.MinimumLevel = LogEventLevel.Warning;
logger.Verbose("This does not.");

现在我想将关卡开关配置移动到app.config,只在代码中留下new LoggerConfiguration().ReadFrom.AppSettings();。在app.config中添加以下内容会限制级别,但在程序运行时我无法找到更改此方法的方法。

<add key="serilog:level-switch:$mySwitch" value="Warning" />
<add key="serilog:minimum-level:controlled-by" value="$mySwitch" />

我试过

  • 只需在app.config中设置值(如果SeriLog重新读取 配置),
  • 暂停程序,在app.config中设置值并调用 ConfigurationManager.RefreshSection("appSettings");(如果它重新阅读但需要一点激励)
  • 在阅读app.config时找到一种方法来访问由SeriLog创建的LoggingLevelSwitch(似乎没有任何可用的属性可以让你围绕生成的配置)

为了澄清,理想情况下我希望SeriLog自动重新读取配置并更新日志级别本身。获得内部开关的参考也是可以接受的;这样我就可以在app.config中保留开关设置,但是我必须创建一种机制,以便在更改时重新读取设置。

我想避免从代码中配置切换,并保持app.config设置与其他SeriLog设置的完成方式一致(即没有自定义app.config属性)。

0 个答案:

没有答案