Log4j2配置未完全生效:控制台格式不符且日志文件为空
Log4j2配置问题修复方案
问题1:RollingFile日志文件为空
核心原因
你的Loggers节点里,Root仅关联了Console输出端,完全没把日志导向testController这个RollingFile Appender,自然不会生成有内容的日志文件。另外DefaultRolloverStrategy里的Delete标签,basePath拼写错误(写成了${basePathr}),会导致日志清理功能失效。
修复步骤
- 在
Root节点下新增RollingFile的关联:
<Loggers> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="testController" /> <!-- 新增这行,让日志输出到文件 --> </Root> </Loggers>
- 修正
Delete标签的路径拼写:
<Delete basePath="${basePath}" maxDepth="10"> <IfLastModified age="365d" /> </Delete>
问题2:控制台日志格式与配置不一致
核心原因
- Console的Pattern格式存在冗余无效内容:末尾的
HH:mm:ss.SSS%d{dd-MM-yyyy}0 | [%-1p]是多余的,会导致日志格式混乱; - Log4j2版本与Spring Boot 2.7.1不兼容:你用的2.11.2版本过低,Spring Boot 2.7.x适配的是2.17.x系列,版本不匹配可能导致配置不生效;
- 依赖引入方式不规范:手动加
log4j-api、log4j-core容易出现版本冲突,建议用Spring Boot官方的starter。
修复步骤
- 清理Console的冗余格式配置:
<Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{dd-MM-yyyy HH:mm:ss.SSS} [%-5level] [%t] %c{1} - %msg%n" /> </Console>
- 替换POM里的Log4j2依赖,用Spring Boot官方starter:
<!-- 删除原手动引入的log4j-api、log4j-core、disruptor,替换成下面的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
完整修复后的log4j2.xml
<?xml version="1.0" encoding="UTF-8" ?> <Configuration status="trace"> <Properties> <Property name="basePath">C:/temp/logs</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{dd-MM-yyyy HH:mm:ss.SSS} [%-5level] [%t] %c{1} - %msg%n" /> </Console> <RollingFile name="testController" fileName="${basePath}/testController.log" filePattern="${basePath}/testController-%d{yyyy-MM-dd}.log"> <PatternLayout> <pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} [%-5level] [%t] %c{1} - %msg%n</pattern> </PatternLayout> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="10"> <Delete basePath="${basePath}" maxDepth="10"> <IfLastModified age="365d" /> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="testController" /> </Root> </Loggers> </Configuration>
验证步骤
- 确认
log4j2.xml在src/main/resources目录下(你的路径截图显示位置正确); - 清理
C:/temp/logs下的旧文件,避免缓存干扰; - 启动应用,查看Log4j2的trace日志,确认配置文件加载无报错。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

