官方配置文档 https://logging.apache.org/log4j/2.x/manual/filters.html
目录
什么是Filter(过滤器)
通过ACCEPT(接受)
, DENY(拒绝)
, NEUTRAL(放行)
来对不同级别的日志进行过滤。
分类
ThresholdFilter
Parameter Name | Description |
---|---|
level | the configured level. |
onMatch | 日志级别 >= the configured level 就算 onMatch .May be ACCEPT , DENY or NEUTRAL . The default value is NEUTRAL . |
onMismatch | 日志级别 < the configured level 就算 onMismatch May be ACCEPT , DENY or NEUTRAL . The default value is DENY . |
场景1:不加ThresholdFilter
仅受到root level
控制
<root level="all">
<AppenderRef ref="CONSOLE"/>
</root>
[2023-04-02 12:01:01] [TRACE] [main] [LogTest.java:9] → [这是测试trace1]
[2023-04-02 12:01:01] [DEBUG] [main] [LogTest.java:10] → [这是测试debug1]
[2023-04-02 12:01:01] [INFO ] [main] [LogTest.java:11] → [这是测试info1]
[2023-04-02 12:01:01] [WARN ] [main] [LogTest.java:12] → [这是测试warn1]
[2023-04-02 12:01:01] [ERROR] [main] [LogTest.java:13] → [这是测试error1]
[2023-04-02 12:01:01] [FATAL] [main] [LogTest.java:14] → [这是测试fatal1]
<root level="error">
<AppenderRef ref="CONSOLE"/>
</root>
[2023-04-02 12:04:17] [ERROR] [main] [LogTest.java:13] → [这是测试error1]
[2023-04-02 12:04:17] [FATAL] [main] [LogTest.java:14] → [这是测试fatal1]
场景2:单个ThresholdFilter
root level
为第一道门,ThresholdFilter level
为第二道门
<appenders>
<console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Filters>
<!--<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</console>
</appenders>
<root level="all">
<AppenderRef ref="CONSOLE"/>
</root>
第1道门: <root level="all"> ☞ 放行所有
第2道门: <ThresholdFilter level="info"> 会 ACCEPT >= INFO 的 FATAL, ERROR, WARN, INFO
[2023-04-02 12:07:22] [INFO ] [main] [LogTest.java:11] → [这是测试info1]
[2023-04-02 12:07:22] [WARN ] [main] [LogTest.java:12] → [这是测试warn1]
[2023-04-02 12:07:22] [ERROR] [main] [LogTest.java:13] → [这是测试error1]
[2023-04-02 12:07:22] [FATAL] [main] [LogTest.java:14] → [这是测试fatal1]
<appenders>
<console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
</appenders>
<root level="error">
<AppenderRef ref="CONSOLE"/>
</root>
第1道门: <root level="error"> ☞ >=error放行
第2道门: <ThresholdFilter level="info"> ☞ >=info放行,因为root level 仅放行 >= error 的日志,所以到这里的都是>=error的error 和 fatal 日志
[2023-04-02 12:08:58] [ERROR] [main] [LogTest.java:13] → [这是测试error1]
[2023-04-02 12:08:58] [FATAL] [main] [LogTest.java:14] → [这是测试fatal1]
场景3:多个ThresholdFilter
过滤指定范围
的日志
<appenders>
<console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Filters>
<!-- >= error 的 FATAL ERROR 被 DENY,< error 的 WARN INFO DEBUG TRACE不拒绝不接受,直接放行让后序filter处理-->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<!-- >= info 的 FATAL ERROR WARN INFO 被 ACCEPT,< info 的 DEBUG TRACE拒绝-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</console>
</appenders>
<root level="all">
<AppenderRef ref="CONSOLE"/>
</root>
第1道门: 全放行: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
第2道门: 第1层ThresholdFilter: 过滤掉: OFF > FATAL > ERROR > 还剩: WARN > INFO > DEBUG > TRACE > ALL
第3道门: 第2层ThresholdFilter: 保留下:WARN > INFO > 过滤掉: DEBUG > TRACE > ALL 还剩: WARN > INFO
[2023-04-02 12:39:31] [INFO ] [main] [LogTest.java:11] → [这是测试info1]
[2023-04-02 12:39:31] [WARN ] [main] [LogTest.java:12] → [这是测试warn1]
TimeFilter
The time filter can be used to restrict filter to only a certain portion of the day.
Parameter Name | Description |
---|---|
start | A time in HH:mm:ss format . |
end | A time in HH:mm:ss format .指定的结束时间小于开始时间将导致不写入日志项 |
timezone | The timezone to use when comparing to the event timestamp. |
onMatch | May be ACCEPT, DENY or NEUTRAL. The default value is NEUTRAL . |
onMismatch | May be ACCEPT, DENY or NEUTRAL. The default value is DENY . |
场景1: from 5:00 to 5:30 am each day using the default timezone
A sample configuration that only allows the event to be written by the appender from 5:00 to 5:30 am each day
using the default timezone
:
<TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>