log4j2.xml

  1. 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" />
    复制代码
  2. 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,才能够把数据往过滤器链的下一环继续传递。
  3. 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的就直接匹配,没有包含的就不匹配

参考链接:neutral vs accpet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值