NLog v5未遵循Microsoft.*日志记录器的finalMinLevel规则
.NET 7 Worker Service中NLog无法限制Microsoft日志级别的问题
问题现象
已在appsettings.json的NLog配置中设置日志记录器Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler的finalMinLevel为Warn,但该日志器的所有Trace日志仍会写入文件和控制台目标。
已尝试的无效操作
- 调整NLog规则列表的顺序
- 将日志记录器名称简化为
Microsoft.* - 提升
finalMinLevel至Error以避免命名冲突
临时方案的局限性
仅有的部分有效方案是使用NLogProviderOptions,但存在明显问题:
builder.AddNLog(new NLogProviderOptions() { RemoveLoggerFactoryFilter = false });
- 丢失其他日志记录器的部分Debug/Trace日志
- 无法将最低级别设为Warn,仅能移除Trace/Debug条目,仍会收到不必要的Info级消息
原NLog配置(appsettings.json)
"NLog": { "internalLogLevel": "Info", "internalLogFile": "internal-nlog.txt", "extensions": [ { "assembly": "NLog.Extensions.Logging" } ], "variables": { "var_logdir": "C:\\test\\test1\\__Logs" }, "targets": { "async": true, "logfile": { "type": "File", "fileName": "${var:var_logdir}/Dispatcher-${shortdate}.log", "layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${callsite}|${message:exceptionSeparator=|:withException=true}" }, "applogfile": { "type": "File", "fileName": "${var:var_logdir}/Dispatcher-xx-${shortdate}.log", "layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${callsite}|${message:exceptionSeparator=|:withException=true}" }, "logconsole": { "type": "ColoredConsole", "useDefaultRowHighlightingRules": true, "detectConsoleAvailable": true, "DetectOutputRedirected": true, "layout": "${longdate}|${level}|${callsite}|${message:exceptionSeparator=|:withException=true}" } }, "rules": [ { "logger": "Microsoft.*", "finalMinLevel": "Warn" }, { "logger": "Microsoft.EntityFrameworkCore*", "finalMinLevel": "Info" }, { "logger": "*", "minLevel": "Trace", "writeTo": "logconsole" }, { "logger": "*", "minLevel": "Trace", "writeTo": "logfile" }, { "logger": "CFX*", "minLevel": "Trace", "writeTo": "applogfile" }, { "logger": "Order*", "minLevel": "Trace", "writeTo": "applogfile" }, { "logger": "Trading*", "minLevel": "Trace", "writeTo": "applogfile" } ] },
项目环境:使用最新包的.NET 7 Worker Service
解决方案
经测试,修改NLog目标的布局,将${callsite}替换为${logger}即可彻底解决问题,修改后的布局示例:
"layout": "${longdate}|${pad:padding=5:inner=${level:uppercase=true}}|${logger}|${message:exceptionSeparator=|:withException=true}"
调整后测试多种规则组合均能正常生效。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

