简单来说,log4j2中的过滤器主要是对日志的输出进行过滤,符合条件的日志可以被当前过滤器通过,进入到后续的处理;不符合条件的日志应该被忽略,不做处理。这是比较常见的使用方式,文末的相关文章里对于过滤器的使用作出了较为详细的说明,这里主要总结一下个人的实践感悟。
MapFilter
MapFilter主要是对MapMessage(log4j2框架中的类)
进行过滤,一般的日志信息,此过滤器不会处理,举例来说,专门处理类似以下方法中的参数。
info(Message msg);
MarkFilter
分析与MapFilter几乎一致。对于日志信息中的标记进行过滤,看一下Logger
类的info()
方法,如下:
void info(Marker marker, String message);
特定的Marker标记的信息可以通过过滤,否则不会通过过滤(包括没有使用Marker)。
RegexFilter
符合正则表达式的日志信息才会通过过滤器,看如下appender:
<File name="regexFilterFile" fileName="./${module_name}/app.log">
<!--日志信息中含有test单词将会通过过滤 -->
<RegexFilter regex=".* test .*" onMatch="ACCEPT" onMismatch="DENY"/>
</File>
正则表达式.* test .*
表示若干个任意字符(排除若干个,这里不做说明) + 空格 + test单词 + 空格 + 若干个任意字符。
例如: i an a test
是不符合要求的,因为test后面没有空格。