
在大型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>配置说明:
以上就是Log4j2高级配置:实现包级与类级日志正则过滤的精细控制的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号