前言

log4j中常用的Filter分为四种:DenyAllFilter、LevelMatchFilter、LevelRangeFilter、StringMatchFilter。

当appender匹配了某个Filter的时候,就不会继续匹配下一个filter,所以当需要配置多个filter时需要注意先后顺序,这样才能实现需要的效果。

这些filter有个共同的属性AcceptOnMatch,用来控制匹配到的appender是否打印日志。

只打印指定level的日志

假如现在只希望打印INFO和ERROR级别的日志,可以这样配置:

<appender name="cntCorelog" class="org.apache.log4j.rolling.RollingFileAppender">
......
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="INFO" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>

这里如果不配置最后一个filter,则会放行所有日志输出。

不打印指定level的日志

假如不希望打印DEBUG级别的日志,可以这样配置:

<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="false" />
</filter>

AcceptOnMatch表示是否输出日志,这里需要注意的是,一旦匹配了某个filter,就无法再匹配后续的filter了,如下:

<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="false" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>

对于上面的配置,ERROR级别的日志匹配了第一个filter后,结果是被过滤掉不被输出,于是第二个filter就不生效了。

如果将上边的配置颠倒过来,如下:

<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR" />
<param name="AcceptOnMatch" value="false" />
</filter>

这时候ERROR级别的日志就依然能正常被打印出来。

只打印从level A到B之间的所有日志

假如现在只想要打印INFO到ERROR级别之间的日志,可以这样配置:

<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="ERROR"/>
<param name="AcceptOnMatch" value="true" />
</filter>

需要注意的是,对于LevelRangeFilter,会匹配所有的appender,如果将该filter置于其他filter的前面,则会导致后续的filter无效。

只打印包含某些字符串的日志

假如只希望打印某些字符串的日志,可以这样配置:

<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="test" />
<param name="AcceptOnMatch" value="true" />
</filter>

如上配置,如果日志里包含了test这个字符串就会被输出到日志了,如果是包含某些字符串就不打印出来,直接将AcceptOnMatch设成false就行。

如果不配置StringToMatch的value,该filter无效;如果将其value配置为""空字符串,该filter则会匹配所有日志。在StringMatchFilter的源码实现里,是通过indexOf()来判断是否包含指定字符串的。

最新文章

  1. Win.ini和注册表的读取写入
  2. APK瘦身实践
  3. Google Volley框架源码走读
  4. js实现拖拽
  5. 解决 SQL Server Profiler 跟踪[不断]出现检索数据
  6. Windows环境下的jekyll本地搭建
  7. iOS - File Archive/UnArchive 文件压缩/解压
  8. Objective-C:Foundation框架-常用类-NSMutableDictionary
  9. 基础面试题——Javascript
  10. Bnuoj-29359 Deal with numbers 线段树
  11. linux netlink套接字学习资料
  12. Oracle delete input与delete all input
  13. HDU2066 一个人的旅行 最短路基础
  14. boost::asio::spawn 将一统C++网络库
  15. Java 8 特性 —— Stream
  16. myeclise2017安装包及破解文件
  17. Hillstone设备管理-许可证安装
  18. git diff 结果分析
  19. nw.js package一般设置
  20. [PC]PHPCMS二次开发指南(上)

热门文章

  1. Servlet学习(1)
  2. iOS中版本号的获取及其意义
  3. Linux 查看服务状态(服务与进程)
  4. codeforces 701D D. As Fast As Possible(数学)
  5. 《Objective-C高级编程》の内存管理の学习笔记
  6. python2代码批量转为python3代码
  7. bzoj3456
  8. 使用 DDMenuController 类的方法(非常好用的抽屉类)
  9. 可移植的配置visual studio工程第三方库
  10. 2.11-2.12 HBase的数据迁移常见方式