如何将 NLog 目标与 Microsoft ILogger 过滤器结合使用?
Posted
技术标签:
【中文标题】如何将 NLog 目标与 Microsoft ILogger 过滤器结合使用?【英文标题】:How to combine NLog Targets with Microsoft ILogger filters? 【发布时间】:2022-01-15 08:19:14 【问题描述】:我们在 .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?注意 NLog 4 在 appsettings 中始终遵循 Microsoft LoggerFactory-config。 NLog 5 默认会忽略 MIcrosoft LoggerFactory-config,除非明确指定NLogProviderOptions.RemoveLoggerFactoryFilter = false
。
NLog 版本为 4.7.8。
您是仅使用 Microsoft ILogger-object 还是直接使用 NLog Logger-object ? (例如NLog.LogManager.GetCurrentClassLogger()
)
要直接禁用日志信息吗?
@RolfKristensen 我们正在使用 Microsoft ILogger 进行日志记录。
【参考方案1】:
如果只使用 Microsoft ILogger,那么您可以在 NLog 中使用它(并依赖 Microsoft LoggerFactory 从 appsettings.json 过滤):
<rules>
<logger name="*" writeTo="NLogTarget"/>
</rules>
升级到 NLog 5.0 时请注意,然后记得在 AddNLog
或 UseNLog
上配置 NLogProviderOptions.RemoveLoggerFactoryFilter = false
(如果使用最新的 NLog,则该设置已经存在,因此您现在可以预先设置)。
大多数用户对拥有 2 个日志过滤系统感到困惑,并期望在使用 NLog 时应用的是 NLog 过滤器。因此将其更改为默认忽略 Microsoft LoggerFactory 过滤器。
请注意,您还可以在 appsettings.json 中拥有 NLog 配置。另见https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json
【讨论】:
谢谢,它有效。以上是关于如何将 NLog 目标与 Microsoft ILogger 过滤器结合使用?的主要内容,如果未能解决你的问题,请参考以下文章