Log4j2的Filters配置详解

本文深入解析Log4j2中Filter的使用,包括ThresholdFilter和TimeFilter的配置与实践,展示如何通过不同设置精细控制日志记录,适用于从基础到进阶的Log4j2用户。

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

官方配置文档 https://logging.apache.org/log4j/2.x/manual/filters.html

什么是Filter(过滤器)

通过ACCEPT(接受), DENY(拒绝) , NEUTRAL(放行) 来对不同级别的日志进行过滤。

分类

ThresholdFilter

Parameter NameDescription
levelthe 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 NameDescription
startA time in HH:mm:ss format.
endA time in HH:mm:ss format.指定的结束时间小于开始时间将导致不写入日志项
timezoneThe timezone to use when comparing to the event timestamp.
onMatchMay be ACCEPT, DENY or NEUTRAL. The default value is NEUTRAL.
onMismatchMay 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"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值