You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLog添加规则失效:无法屏蔽Microsoft调试日志

解决NLog屏蔽Microsoft调试日志的问题

你的问题出在NLog规则的匹配顺序和优先级上。当前的规则写法中,全局规则(无Logger名称过滤)会优先匹配所有日志,包括Microsoft.*开头的日志。当nLogLevel设为Debug时,全局规则允许Debug及以上级别的日志,所以Microsoft的Debug日志会被这条规则直接捕获并记录,后续针对Microsoft.*的规则无法覆盖前面的全局规则。

调整方案一:调整规则顺序并启用Final标记

把针对Microsoft.*的规则放在全局规则前面,并且设置final参数为true,这样匹配到Microsoft.*的日志后,就不会再执行后续的全局规则:

// 先处理Microsoft日志,仅记录Info及以上级别,标记为Final
loggingConfiguration.AddRule(LogLevel.Info, LogLevel.Fatal, logDb, "Microsoft.*", true);
loggingConfiguration.AddRule(LogLevel.Info, LogLevel.Fatal, logfile, "Microsoft.*", true);

// 处理其他所有日志,使用配置的nLogLevel
loggingConfiguration.AddRule(nLogLevel, LogLevel.Fatal, logDb);
loggingConfiguration.AddRule(nLogLevel, LogLevel.Fatal, logfile);

调整方案二:全局规则排除Microsoft.*

修改全局规则,排除Microsoft.*开头的日志,再单独配置Microsoft日志的级别:

// 全局规则排除Microsoft.*,仅处理其他日志
loggingConfiguration.AddRule(nLogLevel, LogLevel.Fatal, logDb, "*", true, "Microsoft.*");
loggingConfiguration.AddRule(nLogLevel, LogLevel.Fatal, logfile, "*", true, "Microsoft.*");

// 单独配置Microsoft日志的记录级别
loggingConfiguration.AddRule(LogLevel.Info, LogLevel.Fatal, logDb, "Microsoft.*");
loggingConfiguration.AddRule(LogLevel.Info, LogLevel.Fatal, logfile, "Microsoft.*");

两种方案都能实现:当nLogLevel设为Debug时,仅记录非Microsoft的Debug日志,Microsoft日志只记录Info及以上级别;当nLogLevel设为Info时,所有日志都只记录Info及以上级别。

内容的提问来源于stack exchange,提问作者BladeZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:49:58