首页 > 解决方案 > 如何记录“元”事件,例如最低级别更改?

问题描述

我想记录有关日志记录本身的元信息,例如最小 LogEventLevel 的更改。我可以用一些“元”属性标记它并赋予它“致命”级别。这是可行的,因为接收器和子记录器可以基于属性进行过滤,并且致命级别确保它始终传播到每个接收器,这样接收器可以选择记录元事件而不管当前的最小 LogEventLevel。

然而,明显的问题是,这使得这些日志事件显示为“致命”,这至少是误导,充其量是丑陋的。

标签: serilog

解决方案


有两个独立的子记录器通道到同一个内部记录器,一个用于元事件,一个用于应用程序事件。

    internal static ILogger _applicationLogger;
    internal static ILogger _metaLogger;
    internal static ILogger _innerLogger;

然后应用程序记录器可以进行级别切换,而元记录器保持不变。

        _innerLogger = myconfig.CreateLogger();
        _metaLogger = new LoggerConfiguration()
            .WriteTo.Logger(_innerLogger)
            .CreateLogger();
        _applicationLogger = new LoggerConfiguration()
            .MinimumLevel.ControlledBy(LogLevelSwitch)
            .WriteTo.Logger(_innerLogger)
            .CreateLogger();

推荐阅读