我们在 .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"
}
}
提前致谢。
使用 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