Log4j2的Filters配置详解

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

[Q&A] 什么是Filter(过滤器)

通过ACCEPT(接受), DENY(拒绝) or 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:单个ThresholdFilterroot 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"/>

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
log4j2.xml是log4j2日志框架的配置文件,用于定义日志输出的格式、级别、目标等。配置文件中包含了多个标签,每个标签都有特定的作用。 首先,配置文件的位置是在classpath目录下,log4j2会按照一定的优先级来选择配置文件。优先级从高到低依次是:log4j2-test.json或log4j2-test.jsn文件、log4j2-test.xml文件、log4j2.json或log4j2.jsn文件、log4j2.xml文件。一般情况下,我们会使用log4j2.xml作为配置文件的名称\[1\]\[2\]。 配置文件中的标签包括: - Configuration:配置文件的根节点,用于指定配置文件的格式和属性。 - Properties:用于定义配置文件中的属性。 - Appenders:用于定义日志输出的目标,可以是控制台、文件、数据库等。 - Loggers:用于定义日志的级别、过滤器和输出目标。 - Filters:用于定义日志的过滤规则。 - Layouts:用于定义日志输出的格式。 在配置文件中,可以使用xml格式或json格式进行配置\[3\]。配置文件中的每个标签都有特定的作用,可以根据需求进行配置,以满足项目的日志需求。 总结起来,log4j2.xml是log4j2日志框架的配置文件,用于定义日志输出的格式、级别、目标等。配置文件中包含了多个标签,每个标签都有特定的作用,可以根据需求进行配置\[1\]\[2\]\[3\]。 #### 引用[.reference_title] - *1* *2* [聊一聊log4j2配置文件log4j2.xml](https://blog.csdn.net/u012824908/article/details/84971122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [log4j2.xml配置详解](https://blog.csdn.net/weixin_46505978/article/details/123469636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值