NLog调整SpecificLogger的minLevel后日志写入错误文件如何解决?
NLog日志拦截问题解决方案
问题原因
final="true" 的生效前提是当前规则匹配到日志。当你将SpecificLogger的minlevel改为Info后,Debug级日志不满足该规则的级别要求,规则不会触发,日志会继续向下匹配通配符规则(name="*"),最终被写入mainFile。
解决方案
方法一:新增拦截规则
添加一条专门匹配SpecificLogger的Debug日志的规则,不指定写入目标,同时设置final="true",直接终止后续规则匹配:
<rules> <!-- 拦截SpecificLogger的Debug日志,不写入任何文件 --> <logger name="SpecificLogger" minlevel="Debug" maxlevel="Debug" final="true" /> <!-- 处理SpecificLogger的Info及以上级别日志 --> <logger name="SpecificLogger" minlevel="Info" writeTo="specificFile" final="true" /> <!-- 处理其他所有日志的Debug及以上级别 --> <logger name="*" minlevel="Debug" writeTo="mainFile" /> </rules>
方法二:使用过滤器修改原有规则
保留原规则的全级别匹配,通过过滤器仅允许Info及以上级别写入specificFile,同时final="true"阻止后续规则:
<rules> <logger name="SpecificLogger" minlevel="Debug" writeTo="specificFile" final="true"> <filters> <!-- 忽略Debug级别的日志,不写入specificFile --> <when condition="level < LogLevel.Info" action="Ignore" /> </filters> </logger> <logger name="*" minlevel="Debug" writeTo="mainFile" /> </rules>
两种方案都能实现你的需求:SpecificLogger的Debug日志完全不写入任何文件,Info及以上日志写入specificFile,其他日志的Debug及以上级别正常写入mainFile。
内容的提问来源于stack exchange,提问作者East of Nowhere
相关产品推荐
相关产品推荐

