2017-08-10-log4j-Filter过滤器

本文详细介绍了Log4j 1.2.17版本中的过滤器机制,包括Filter抽象类及其实现类如DenyAllFilter、LevelMatchFilter、LevelRangeFilter和StringMatchFilter等。通过具体配置示例说明如何利用这些过滤器来精确控制日志记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Log4j

基于log4j版本:1.2.17

7、Filter

顾名思义过滤器。

7.0 类图

图

7.1 Filter<abstract>

过滤器,在threshold的基础上,用于实现进一步的过滤。可以在一个Appender上添加多个过滤器。

    // 返回
    // -1 不打印这个日志,不用经过下一个日志器判断
    // 0 不决定,调用下一个过滤器
    // 1 直接打印这个日志,不用经过下一个日志器判断
  abstract public int decide(LoggingEvent event);

  public void setNext(Filter next) {
    this.next = next;
  }

  public Filter getNext() {
        return next;
  }

7.2 DenyAllFilter

不打印所有的日志,可以与其他配合使用

  public int decide(LoggingEvent event) {
    return Filter.DENY;
  }

7.3 LevelMatchFilter

匹配levelToMatch所对应的日志等级,若

  • acceptOnMatch=false 则不打印
  • acceptOnMatch=true 则打印
#log4j.appender.c1.filter.F=org.apache.log4j.varia.LevelMatchFilter
#log4j.appender.c1.filter.F.acceptOnMatch=false
#log4j.appender.c1.filter.F.levelToMatch=WARN

7.4 LevelRangeFilter

匹配范围,不在范围内的不打印。若在范围内

  • acceptOnMatch = true 则直接打印
  • acceptOnMatch = false 则调用下一个filter判断是否打印
#log4j.appender.c1.filter.F=org.apache.log4j.varia.LevelRangeFilter
#log4j.appender.c1.filter.F.LevelMin=INFO
#log4j.appender.c1.filter.F.LevelMax=ERROR
#log4j.appender.c1.filter.F2.acceptOnMatch=true

7.5 StringMatchFilter

字符串匹配过滤器。根据stringToMatch所指定的字符串,如果匹配到该字符串,若

  • acceptOnMatch = true 则打印
  • acceptOnMatch = false 则不打印

下面配置展示了配合DenyAllFilter,使得只打印日志中包含 lxylog字符串的日志,在大型项目中,我们只负责部分模块开发,则这样设置就可以不用打出大量的别人的日志了。当然一些底层框架的日志也无法显示了。不过都可以过滤,比如想要hibernate的日志,可以相应的配置一个即可(未尝试,设想,因为所有Hibernate的日志都有Hibernate的标识)。

log4j.appender.c1.filter.G=org.apache.log4j.varia.DenyAllFilter

log4j.appender.c1.filter.F2=org.apache.log4j.varia.StringMatchFilter
log4j.appender.c1.filter.F2.acceptOnMatch=true
log4j.appender.c1.filter.F2.stringToMatch=lxylog

此处需要注意的一点就是,由于log4j载入这两个过滤器(如上是G和F2)不是按照配置的顺序,而是按照ABC字母顺序(即先配置A,后B,最后C)这样的顺序,所以上面DenyAllFilter过滤器的名字为G而StringMatchFilter为F2,因为F2会在G之前被读取配置,如果DenyAllFilter为F2,StringMatchFilter为G,那么就不会打印出日志了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值