我想记录关于日志记录本身的元信息,例如最小LogEventLevel的变化。我可以用一些"元"标记它;并赋予它"致命"的程度。这是有效的,因为接收器和子记录器可以基于属性进行过滤,并且致命级别确保它始终传播到每个接收器,这样接收器可以选择记录元事件,而不管当前的最小LogEventLevel是多少。
然而,明显的问题是,这使得这些日志事件显示为"fatal",这至少是误导,充其量是丑陋的。
为同一个内部日志记录器设置两个独立的子日志记录器通道,一个用于元事件,一个用于应用程序事件。
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();
一种方法是创建一个接收器包装器,该包装器检查是否存在meta
属性,并在进行更改之前将日志级别从Fatal
修改为最合适的级别,以满足目标接收器的最低级别。例如:https://stackoverflow.com/a/68854607/211672