-
onMatch vs onMismatch
首先要说明的是,在log4j2里面日志有8个等级,由低到高是:all<trace<debug<info<warn<error<fatal<off- 看下面的配置,这个配置会输出error及以上的日志级别,也就是onMatch匹配的是 大于等于 该等级的日志,输出的就是error,fatal
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> 复制代码
- 然后是一个相反的配置,这个配置会输出error以下的日志级别,也就是onMismatch匹配的是 小于 该等级的日志,输出的就是warn,info,debug,trace
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT" /> 复制代码
-
neutral vs accept
- 现在进入正题,继续看下面的一个配置,本来期待的是,这个配置对应的日志应该只输出warn等级的,结果却不是,居然把warn,info,debug和trace的等级都输出了,经过多次试验,无论怎么修改第二个过滤器,都是同样的结果,可以知道其实第二个过滤器是不起作用的。
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT" /> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" /> 复制代码
- 那么为了让第2个过滤器起作用,可以把上述配置修改如下,这个时候终于跟预期一样了,只输出了warn等级的日志。对比上下两个配置可以知道,其实只是把第一个过滤器的不匹配过滤策略字段从 ACCEPT修改为NEUTRAL
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" /> 复制代码
- 总结:由两个不同配置的日志的输出结果可以推论,当使用多个过滤器时,如果想要后面的过滤器起效,不能使用accept,而应该使用neutral,才能够把数据往过滤器链的下一环继续传递。
-
ThresholdFilter vs MarkerFilter
- 对于这两种不同的过滤器,他们的区别其实就在与对于匹配策略的差异, ThresholdFilter的匹配策略已经在开头说了,是属于有层次的过滤。而对于MarkerFilter来说,对于层次不敏感,如果匹配,那么就输出对应这一个等级的日志,不会往上也不会往下递进输出。
- 这里先来看java代码,marker这个过滤器使用的时候,是依附于logger的,至于是否能够独立使用,我个人不太清楚。
Logger logger = LogManager.getLogger("mylog"); Marker marker = MarkerManager.getMarker("FLOW"); logger.trace("trace level"); logger.debug(marker,"debug level"); logger.info(marker,"info level"); logger.warn(marker,"warn level"); logger.error(marker,"error level"); logger.fatal(marker,"fatal level"); 复制代码
- 然后看对应的配置文件1,这里输出的结果是,只有trace的,
<Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> <MarkerFilter marker="FLOW" onMatch="DENY" onMismatch="ACCEPT" /> </Filters> 复制代码
- 然后看对应的配置文件2,这里输出的结果是,warn,info,debug 3个
<Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> 复制代码
- 总结:包含有marker的就直接匹配,没有包含的就不匹配
log4j2 ThresholdFilter onMatch/onMismatch neutral/accept
于 2022-06-04 15:45:34 首次发布