前言

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()来判断是否包含指定字符串的。

log4j.xml中Filter的用法的更多相关文章

  1. wed.xml 中 filter、servlet 配置格式

    1.wed.xml 中 filter 配置格式 <filter> <filter-name>filterName</filter-name> <filter- ...

  2. Web.xml中Filter过滤器标签几个说明

    在研究liferay框架中看到Web.xml中加入了过滤器的标签,可以根据页面提交的URL地址进行过滤,发现有几个新标签没用过,下面就介绍以下几个过滤器的标签用法: <!-- 定义Filter ...

  3. springboot中filter的用法

    一.在spring的应用中我们存在两种过滤的用法,一种是拦截器.另外一种当然是过滤器.我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别. 二 ...

  4. web.xml中Filter过滤器标签说明

    原文:http://www.cnblogs.com/edwardlauxh/archive/2010/03/11/1918618.html 在研究liferay框架中看到Web.xml中加入了过滤器的 ...

  5. web.xml中Filter,Listener,Servlet的区别

    一.Servlet Servlet是基本的服务端程序,他来自接口Servlet,接口中有方法service.而Servlet的一个重要实现类,则是tomcat服务器的核心,那就是HttpServlet ...

  6. web.xml中Filter的作用

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...

  7. web.xml中filter加载顺序出现的问题

    刚刚遇到了一个问题,项目中需要用到characterEncodingFilter和HiddenHttpMethodFilter,但是post请求还是会中文乱码,找了半天原因,后来发现,filter加载 ...

  8. sql xml中 in 的用法

    在xml中,动态传参去数据库查询,下面是in的示例. 比如有条sql SELECT * FROM corp_tax c WHERE c.id in (387419,387423) AND c.corp ...

  9. js中filter过滤用法总结

    定义和用法 filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素. 注意: filter() 不会对空数组进行检测. 注意: filter() 不会改变原始数组 ...

随机推荐

  1. APP上线审核注意事项

    基本要点 ·         不能导致手机故障(比如崩溃或屏幕问题) ·         长时间/过度使用之后反应仍然很快 ·         应用内的所有价格信息中不能用固定值代替可变变量 ·    ...

  2. 往android的内核添加驱动及 ueventd.rc 修改【转】

    本文转载自:http://blog.csdn.net/lkqboy2599/article/details/8350100 向android的内核添加驱动,其实就是向linux内核添加驱动.主要在两个 ...

  3. HDU4045 Machine scheduling —— 隔板法 + 第二类斯特林数

    题目链接:https://vjudge.net/problem/HDU-4045 Machine scheduling Time Limit: 5000/2000 MS (Java/Others)   ...

  4. xml文件的解析(用dom4j解析)

    有个第三方的包,用来解析.xml文件比较方便,它是DOM4J.由于是第三方的,所以要使用它就要先下载,并包含进来.步骤: 1.打开dom4j官网,这里下载最新版dom4j-2.1.1.jar. 2.新 ...

  5. IOS开发学习笔记(1)-----UILabel 详解

    1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, ...

  6. web.xml 有什么用?

    1.每个javaEE工程中都有web.xml文件,那么它的作用是什么呢?它是每个web.xml工程都必须的吗? 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须 ...

  7. Java 高阶 —— 相等性比较

    1. 包装类 所有的相同类型的包装类对象之间的值的比较,全部使用 equals 方法: 对于 Integer a = ?,在 -128 到 127 范围内的赋值,Integer 对象是在 Intege ...

  8. [ZJOI 2013] K大数查询

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3110 [算法] 整体二分 + 线段树 时间复杂度 : O(NlogN ^ 2) [代 ...

  9. doc命令大全

    不是原创的,但基本上收入了各个网站dos命令了基本上可以作为电子书使用,希望对各位有用net use \\ip\ipc$ " " /user:" " 建立IPC ...

  10. selenium_page_object

    最简单的pageobject github地址:https://github.com/defnngj/selenium_page_objects