log4j2.xml 是 Log4j 2 的 XML 格式核心配置文件,需包含 Configuration、Appenders、Loggers(含 Root)三部分;日志级别按 TRACE<DEBUG/INFO/WARN/ERROR/FATAL/OFF 递增,Root level 控制全局,默认继承,additivity="false" 可避免重复输出;常用 Appender 有 Console(调试)和 RollingFile(生产,支持时间/大小滚动);调试时可设 status="DEBUG" 或加 -Dlog4j2.debug 参数。

log4j2.xml 是 Log4j 2 的核心配置文件,用 XML 格式定义日志输出行为。日志级别控制哪些日志会被记录(比如只输出 ERROR 及以上),关键在于 <Root> 或 <Logger> 中的 level 属性。
基础结构:必须包含的几个部分
一个可用的 log4j2.xml 至少要有:配置根节点、Appender(输出目的地)、Logger(日志器)和 Root(根日志器)。示例最小配置:
<?xml version="1.0" encoding="UTF-8"?><Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
日志级别设置方法
Log4j 2 支持的级别从低到高为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。级别设得越低,输出日志越多;设得越高,越严格。
-
在 Root 中设置:影响所有未单独配置的 Logger,如
<Root level="warn">表示只输出 WARN 及更高级别日志 -
在自定义 Logger 中设置:可针对某个包或类精细控制,例如:
<Logger name="com.example.service" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
这样com.example.service下的日志按 DEBUG 级别输出,其他仍走 Root 配置 - additivity="false" 很重要:避免日志重复打印(即不继承 Root 的输出)
常用 Appender 示例:控制输出位置
除了控制“输出什么级别”,还要指定“输出到哪”。常见组合:
- 控制台输出(Console):开发调试用,上面已展示
-
文件输出(File / RollingFile):生产环境推荐用
RollingFile,支持按大小/时间滚动归档
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
</RollingFile>
验证与调试小技巧
如果日志没按预期输出,可以:
- 检查
status="WARN"是否写成status="DEBUG",开启 Log4j 自身的内部日志,看加载是否成功 - 确认类路径下只有 一个 log4j2.xml(多个会冲突)
- Java 启动时加参数
-Dlog4j2.debug查看详细初始化过程 - 在代码中调用
Logger.getLogger("xxx").debug("test")测试是否触发
基本上就这些。配置不复杂但容易忽略 additivity 和文件路径权限等细节,建议先跑通 Console 输出,再逐步加 RollingFile 和级别分层。










