您的位置:首页 >Log4j2包级类级日志正则过滤技巧
发布于2025-10-11 阅读(0)
扫一扫,手机访问

在大型Java应用中,日志配置往往需要高度的灵活性,以满足不同模块或类的特定日志输出要求。Log4j2提供了强大的配置能力,通过其分层的Logger机制和各种Filter,可以实现非常精细的控制。核心概念包括:
假设我们面临以下日志需求:
这意味着com.app.package.two.class7需要比其父级包com.app.package更宽松的日志内容过滤条件。
最初的配置尝试可能如下所示,它试图通过定义两个Logger来解决问题:一个针对整个包,另一个针对特定类。
<!-- 针对 com.app.package 包的通用配置 -->
<Logger name="com.app.package" level="error">
<RegexFilter regex=".*(?i)exception(?-i).*" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 缺少 AppenderRef -->
</Logger>
<!-- 针对 com.app.package.two.class7 的特定配置 -->
<Logger name="com.app.package.two.class7" level="error">
<!-- 正则表达式中管道符 '|' 周围有空格,可能导致匹配失败 -->
<RegexFilter regex=".*(?i)exception(?-i).* | .*(?i)sometext(?-i).*" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 缺少 AppenderRef -->
</Logger>这段配置存在两个关键问题,导致其无法按预期工作:
要同时满足所有条件,并确保日志能够正确输出,需要修正上述两个问题。以下是经过调整后的Log4j2 XML配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- 定义一个名为 LogToConsole 的控制台 Appender -->
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 可以根据需要定义其他 Appender,如文件 Appender -->
</Appenders>
<Loggers>
<!--
1. 针对 com.app.package 包及其所有子类(不包括 class7,因为它有更具体的配置)
- 日志级别为 ERROR
- 消息内容必须包含 "exception" (不区分大小写)
- 引用 LogToConsole Appender
- additivity="false" 确保它不会将日志事件传递给其父级 Logger 的 Appender
-->
<Logger name="com.app.package" level="error" additivity="false">
<RegexFilter regex=".*(?i)exception(?-i).*" onMatch="ACCEPT" onMismatch="DENY"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<!--
2. 针对 com.app.package.two.class7 类
- 日志级别为 ERROR
- 消息内容必须包含 "exception" 或 "sometext" (不区分大小写)
- 引用 LogToConsole Appender
- additivity="false" 确保它不会将日志事件传递给其父级 Logger 的 Appender
-->
<Logger name="com.app.package.two.class7" level="error" additivity="false">
<!-- 修正了正则表达式,移除了管道符两侧的空格 -->
<RegexFilter regex=".*(?i)exception(?-i).*|.*(?i)sometext(?-i).*" onMatch="ACCEPT" onMismatch="DENY"/>
<AppenderRef ref="LogToConsole"/>
</Logger>
<!-- 根 Logger 配置,通常用于捕获未被其他 Logger 显式配置的日志 -->
<Root level="info">
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>配置说明:
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9