如何将 NLog 目标与 Microsoft ILogger 过滤器结合起来?

Ven*_*kat 5 logging nlog asp.net-core

我们在 .net 5.0 Web API 中使用 NLog,感觉日志级别是在多个位置设置的。有没有一种方法可以配置 nLog 以使用应用程序设置并忽略 nLog.config 日志级别?

nlog.config

<rules>
    <logger name="*" levels="Trace,Debug,Info,Warn,Error,Fatal" writeTo="NLogTarget"/>
</rules>
Run Code Online (Sandbox Code Playgroud)

应用程序设置.json:

"Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Debug"
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢。

Rol*_*sen 8

然后使用 NLog v5 NLog.Extensions.Logging 会忽略Microsoft LoggerFactory 中配置的过滤器appsettings.json

大多数用户会对 2 个日志过滤系统感到困惑,并期望在使用 NLog 时应用的是 NLog 过滤器。因此,NLog v5 已更改为默认忽略 Microsoft LoggerFactory 过滤器。

建议使用 NLog 配置来配置过滤,因为它会减少像这样的意外:

<rules>
    <logger name="System.*" finalMinLevel="Warn" />
    <logger name="Microsoft.*" finalMinLevel="Warn" />
    <logger name="Microsoft.Hosting.Lifetime*" finalMinLevel="Info" /> <!-- Overrides previous rule -->
    <logger name="*" minLevel="Debug" writeTo="NLogTarget" />
</rules>
Run Code Online (Sandbox Code Playgroud)

您还可以使用${configsetting}来解析默认日志级别,appsettings.json如下所示:

<rules>
    <logger name="System.*" finalMinLevel="Warn" />
    <logger name="Microsoft.*" finalMinLevel="Warn" />
    <logger name="Microsoft.Hosting.Lifetime*" finalMinLevel="Info" /> <!-- Overrides previous rule -->
    <logger name="*" minLevel="${configsetting:Logging.LogLevel.Default:whenEmpty=Debug}" writeTo="NLogTarget" />
</rules>
Run Code Online (Sandbox Code Playgroud)

仍然可以通过在调用或时进行配置appsettings.json,将 NLog 配置为遵循 Microsoft LoggerFactory(来自 )中配置的过滤。然后就可以这样做:NLogProviderOptions.RemoveLoggerFactoryFilter = falseAddNLogUseNLog

<rules>
    <logger name="*" writeTo="NLogTarget"/>
</rules>
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以在appsettings.json. 另请参阅https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json