log4j2是Java生态中广泛使用的日志框架,通过log4j2.xml配置文件可以灵活控制日志的输出位置、格式以及日志级别,而日志级别配置是其中核心的部分,决定了哪些日志会被记录、哪些会被过滤。

log4j2日志级别说明
log4j2内置了8个日志级别,按照优先级从低到高依次为:
- ALL:最低级别,打开所有日志记录
- TRACE:追踪级别,输出程序运行的详细轨迹信息
- DEBUG:调试级别,输出调试相关的详细信息
- INFO:信息级别,输出程序运行的关键信息
- WARN:警告级别,输出潜在的问题提示
- ERROR:错误级别,输出程序运行中的错误信息
- FATAL:严重错误级别,输出导致程序退出的严重错误
- OFF:最高级别,关闭所有日志记录
日志输出规则是:只会输出优先级大于等于当前配置级别的日志,比如配置级别为INFO,那么INFO、WARN、ERROR、FATAL级别的日志都会被输出,而TRACE和DEBUG级别的日志会被过滤。
log4j2.xml基础结构
一个标准的log4j2.xml配置文件主要包含Configuration根节点,根节点下通常包含Appenders和Loggers两个核心子节点:
Appenders:定义日志的输出目的地,比如控制台、文件、滚动文件等Loggers:定义日志记录器,配置不同包或类的日志级别,以及关联的Appender
完整的log4j2.xml配置示例
以下是一个包含控制台和滚动文件输出,且配置了不同日志级别的完整log4j2.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!-- 定义属性,方便后续复用 -->
<Properties>
<Property name="LOG_HOME">./logs</Property>
<Property name="FILE_NAME">app</Property>
</Properties>
<Appenders>
<!-- 控制台输出Appender -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 滚动文件输出Appender -->
<RollingFile name="RollingFile" fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- 第三方包日志级别配置,避免输出过多无用日志 -->
<Logger name="org.springframework" level="WARN" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
<!-- 自定义业务包日志级别配置 -->
<Logger name="com.example.service" level="DEBUG" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Logger>
<!-- 根日志记录器配置 -->
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
配置说明与注意事项
1. Configuration的status属性
Configuration的status属性用于设置log4j2框架自身的日志级别,这里设置为WARN,避免输出过多框架调试信息,不影响业务日志的配置。
2. Logger的additivity属性
additivity默认值为true,表示当前Logger的日志会传递给父Logger,设置为false可以避免日志重复输出,比如自定义Logger配置了additivity为false,日志只会输出到当前Logger关联的Appender,不会传递给Root Logger。
3. 日志级别的生效范围
Logger的level属性只对该Logger对应的包或类生效,比如上述配置中com.example.service包下的类日志级别为DEBUG,会输出DEBUG及以上级别的日志,而其他未单独配置的包会继承Root Logger的INFO级别。
Java代码中使用日志示例
配置完成后,在Java代码中可以通过以下方式使用log4j2输出不同级别的日志:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class TestService {
// 获取日志记录器,参数为当前类的Class对象
private static final Logger logger = LogManager.getLogger(TestService.class);
public void testLog() {
logger.trace("这是trace级别的日志");
logger.debug("这是debug级别的日志");
logger.info("这是info级别的日志");
logger.warn("这是warn级别的日志");
logger.error("这是error级别的日志");
logger.fatal("这是fatal级别的日志");
}
}
如果TestService类在com.example.service包下,运行testLog方法时,会输出DEBUG、INFO、WARN、ERROR、FATAL级别的日志,而TRACE级别的日志会被过滤,符合我们之前的配置规则。
log4j2log4j2.xml日志级别log4j2配置修改时间:2026-06-25 09:09:35