NLog的IgnoreFinal/LogFinal:忽略所有后续规则还是仅匹配当前过滤规则?
NLog中
IgnoreFinal/LogFinal的"忽略所有后续日志规则"含义解析 核心结论
IgnoreFinal和LogFinal里的"忽略所有后续日志规则",指的是一旦当前过滤规则被触发(日志条目匹配该规则的所有条件),后续所有的过滤规则都会被直接跳过,不再进行任何判断,绝非只针对条件相同的规则。
结合示例分析
针对你给出的过滤规则:
Filter 1: min=Debug max=Fatal condition=length('${message}') > 100 action=IgnoreFinal Filter 2: min=Trace max=Warn condition=length('${message}') > 100 action=Log
分两种场景判断:
- 场景1:日志是Debug~Fatal级别、消息长度>100
该日志会匹配Filter 1的所有条件,触发IgnoreFinal动作:这条日志不会被记录,并且后续的Filter 2会被直接忽略——哪怕它的条件也满足,也不会执行任何判断。 - 场景2:日志是Trace级别、消息长度>100
该日志不匹配Filter 1(Trace不在Filter 1的min-max级别范围内),所以Filter 1不会触发。流程会继续走到Filter 2,满足条件后执行Log动作,这条日志会被正常记录。
补充说明
NLog的过滤规则是按配置顺序依次执行判断的,只有当某条规则触发了IgnoreFinal或LogFinal时,才会终止后续所有规则的执行;如果当前规则未被触发(日志不匹配其条件),则会继续判断下一条规则。
内容的提问来源于stack exchange,提问作者Danielle
相关产品推荐
相关产品推荐

