Log4j2是Java生态中常用的日志框架,通过Log4j2.xml配置文件可以灵活控制日志的输出规则,包括日志级别过滤、输出目的地选择、输出格式定义等,满足不同场景下的日志管理需求。

Log4j2.xml的基础结构
一个标准的Log4j2.xml配置文件主要包含<Configuration>根节点,根节点下分为<Properties>、<Appenders>、<Loggers>三个核心部分,各部分分工明确,共同实现日志的配置逻辑。
<Properties>:定义全局配置属性,比如日志文件路径、日志格式模板等,方便后续节点复用<Appenders>:定义日志的输出目的地,比如控制台、本地文件、滚动文件等<Loggers>:定义日志记录器,关联对应的Appender,同时设置日志级别过滤规则
日志级别说明与优先级
Log4j2内置了8个日志级别,按照优先级从低到高排序如下,配置日志级别后,只会输出优先级大于等于该级别的日志:
| 日志级别 | 说明 |
|---|---|
| ALL | 最低级别,输出所有日志 |
| TRACE | 追踪级别,记录程序运行的详细轨迹 |
| DEBUG | 调试级别,记录调试相关的信息 |
| INFO | 信息级别,记录程序正常运行的关键信息 |
| WARN | 警告级别,记录潜在的问题但不影响程序运行 |
| ERROR | 错误级别,记录程序运行出现的错误 |
| FATAL | 严重错误级别,记录导致程序退出的严重问题 |
| OFF | 最高级别,关闭所有日志输出 |
日常开发中常用的级别是DEBUG、INFO、WARN、ERROR四个,生产环境一般配置为INFO或WARN级别,减少不必要的日志输出。
输出目的地Appender配置
控制台输出Appender
控制台Appender用于将日志输出到标准输出流,适合开发阶段调试使用,配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- 控制台输出配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 日志输出格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
文件输出Appender
文件Appender用于将日志输出到指定文件,适合需要持久化日志的场景,配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<!-- 定义日志文件路径属性 -->
<Property name="logPath">./logs</Property>
<Property name="fileName">app.log</Property>
</Properties>
<Appenders>
<!-- 文件输出配置 -->
<File name="File" fileName="${logPath}/${fileName}" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
其中append="true"表示日志追加到文件末尾,设置为false则每次启动程序会覆盖原有日志文件。
滚动文件Appender
滚动文件Appender可以自动按时间或文件大小切割日志文件,避免单个日志文件过大,是生产环境常用的配置,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="logPath">./logs</Property>
</Properties>
<Appenders>
<!-- 滚动文件输出配置 -->
<RollingFile name="RollingFile" fileName="${logPath}/app.log"
filePattern="${logPath}/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<!-- 按天切割日志 -->
<TimeBasedTriggeringPolicy interval="1"/>
<!-- 单个文件超过10MB切割 -->
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- 最多保留30个日志文件 -->
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
自定义Logger配置
除了根Logger<Root>,还可以配置自定义Logger,针对不同的包或类设置不同的日志级别和输出规则,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<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} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- 自定义Logger,针对com.example.service包设置DEBUG级别,输出到控制台 -->
<Logger name="com.example.service" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<!-- 根Logger,默认INFO级别,输出到滚动文件 -->
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
其中additivity="false"表示该Logger的日志不会传递给父Logger,避免重复输出。
完整配置示例
以下是一个同时包含控制台、滚动文件输出,且配置了自定义Logger的完整Log4j2.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="logPath">./logs</Property>
<Property name="pattern">%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${pattern}"/>
</Console>
<RollingFile name="RollingFile" fileName="${logPath}/app.log"
filePattern="${logPath}/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="${pattern}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.example" level="debug" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
配置完成后,将文件放在项目的resources目录下,Log4j2框架会自动加载该配置,按照设定的规则输出日志。
Log4j2Log4j2.xml日志级别日志输出Appender修改时间:2026-06-30 05:54:44