升级到NLog 5后带过滤规则的日志写入功能失效
问题根因
该问题是NLog 5.0版本的破坏性变更导致,与target、日志布局配置无关:
- NLog 4.x 版本中,
<filters>节点未显式指定defaultAction属性时,默认值为Log:未命中任何<when>过滤规则的日志会正常写入绑定的target,仅命中action="Ignore"规则的日志会被丢弃。 - NLog 5.0 版本调整了这一默认逻辑:
<filters>节点未显式配置defaultAction时,默认行为改为Ignore,所有未命中过滤规则的日志都会被直接丢弃。
你的配置里,绑定f常规日志文件的logger规则配置了filters但未指定defaultAction,升级后所有不匹配两条Ignore规则的Trace到Warn级别日志全被过滤,因此不会生成常规日志;绑定fe错误日志的logger规则未配置filters,不受该变更影响,所以可以正常写入。
修复方案
不需要调整其他业务配置,仅需给对应规则的<filters>节点显式添加defaultAction="Log"属性,就能完全恢复NLog 4.x版本的行为,修改后的rules节点如下:
<rules> <logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="f" > <filters defaultAction="Log"> <when condition="contains('${message}','[HTTPS]')" action="Ignore"/> <when condition="contains('${message}','[EmailCachingHelper]')" action="Ignore"/> </filters> </logger> <logger name="*" minlevel="Error" writeTo="fe" ></logger> </rules>
其他升级注意事项
升级到NLog 5.0不需要额外添加全局配置,除上述过滤器默认行为变更外,其余配置逻辑和4.x版本兼容。修改配置后重启应用,常规日志文件就会正常生成,原有两条日志过滤规则也会正常生效。
内容的提问来源于stack exchange,提问作者bzamfir
相关产品推荐
相关产品推荐

