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

问题描述 投票:0回答:1

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

nlog.config

<rules>
    <logger name="*" levels="Trace,Debug,Info,Warn,Error,Fatal" writeTo="NLogTarget"/>
</rules>

AppSettings.json:

"Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Debug"
    }
}

提前致谢。

asp.net-core logging nlog
1个回答
8
投票

使用 NLog v5,则 NLog.Extensions.Logging 会忽略 appsettings.json

 在 Microsoft LoggerFactory 中配置的过滤器

大多数用户对 2 个日志过滤系统感到困惑,并期望在使用 NLog 时应用的是 NLog 过滤器。因此将其更改为默认忽略 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>

您还可以使用 ${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>

仍然可以通过在调用

appsettings.json
NLogProviderOptions.RemoveLoggerFactoryFilter = false
时配置
AddNLog
来配置 NLog 以遵循 Microsoft LoggerFactory 中配置的过滤(来自
UseNLog
)。然后就可以这样做:

<rules>
    <logger name="*" writeTo="NLogTarget"/>
</rules>

注意,您还可以在

appsettings.json
中拥有整个 NLog 配置。另请参阅https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json

© www.soinside.com 2019 - 2024. All rights reserved.