Log4j2 的 log4j2.xml 是主流配置方式,核心包括 Appender(输出目标)、Layout(格式)、Logger(级别控制)及其绑定关系;最小配置需 Configuration 根标签、至少一个 Appender 和 Root Logger,并注意命名空间、路径、filePattern 时区及 additivity 等细节。

Log4j2 的 log4j2.xml 是主流的配置方式,比 properties 更灵活、可读性更强。核心是定义日志输出目标(Appender)、日志格式(Layout)、日志级别控制(Logger)以及它们之间的绑定关系。
基础结构:根节点与必需元素
一个最小可用的 log4j2.xml 必须包含 Configuration 根标签,并至少配置一个 Appender 和一个 Root Logger:
-
Configuration:最外层容器,常用属性有status(内部日志级别,如 "warn")和monitorInterval(秒级自动重载配置,如 "30") -
Appenders:定义日志输出位置,比如控制台(Console)、文件(File/RollingFile)、网络(Socket)等 -
Loggers:定义日志记录器,root是默认入口,也可自定义命名 Logger 控制特定包或类
常用 Appender 示例:控制台 + 滚动文件
生产环境通常需要同时输出到控制台(便于调试)和按天/大小滚动的文件(便于归档):
-
Console Appender:用
,搭配PatternLayout定义日志格式,例如%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n -
RollingFile Appender:支持按时间(如每天)或大小(如 100MB)切分日志。需指定
fileName(当前文件路径)、filePattern(归档文件名,含日期占位符如app-%d{yyyy-MM-dd}-%i.log.gz),并嵌套TimeBasedTriggeringPolicy或SizeBasedTriggeringPolicy作为触发策略 - 别忘了在
RollingFile内配置DefaultRolloverStrategy来限制保留文件数,比如max="30"表示最多存 30 个归档
Logger 配置:精准控制日志级别与输出目标
Logger 决定哪些类的日志被记录、以什么级别、输出到哪些 Appender:
-
:全局默认,所有未显式配置的类都走这里;level可设为 trace/debug/info/warn/error/fatal -
:针对某个包开启 debug 日志;additivity="false"表示不继承 root 的 Appender,避免重复打印 - 每个 Logger 内用
绑定具体输出目标,可同时引用多个 Appender
实用技巧与易错点
写配置时容易忽略但很关键的细节:
- XML 命名空间必须正确:
xmlns="http://logging.apache.org/log4j/2.0/config",否则 Log4j2 无法解析 - 文件路径尽量用相对路径或系统属性(如
${sys:catalina.base}/logs/app.log),避免硬编码绝对路径 - 如果用了
RollingFile却没生成归档文件,先检查filePattern中的日期格式是否匹配系统时区,再确认磁盘是否有写权限 - 想让某类日志只输出到文件、不刷屏,就给它的 Logger 设置
additivity="false"并只引用文件 Appender
基本上就这些。配置不复杂但容易忽略细节,建议从最小可运行版本开始,逐步加功能、验证效果。










