Spring Boot 3中log4j2.xml配置未生效问题求助
Spring Boot 3(Java 17)Log4j2配置不生效问题
搭建基于Spring Boot 3(Java 17)的项目时,已引入Log4j2依赖并在src/main/resources目录下添加log4j2.xml配置文件,但日志输出未遵循配置的格式。排查Maven依赖树发现存在未在pom.xml中声明的Logback依赖,尝试排除spring-boot-starter-logging及Logback相关依赖后问题仍未解决。
现有pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.geek8080</groupId> <artifactId>db_service</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>db_service</name> <description>DB Service for web app</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
现有log4j2.xml配置
<?xml version="1.0" encoding="UTF-8" ?> <Configuration> <Properties> <Property name="logpath-location">/app/logs</Property> <Property name="logfile-name">db_service.log</Property> <Property name="archive">${logpath-location}/archive/dbservice</Property> <Property name="interval">10</Property> </Properties> <Appenders> <Console name="Console"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %C.%M():%L %X - %m%n"/> </Console> <RollingFile name="RollingFileAppender" fileName="${logpath-location}/${logfile-name}" filePattern="${archive}/${logfile-name}.%d{yyyy-MM-dd-HH}.gz"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %c.%M ():%L %X - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> </Policies> </RollingFile> </Appenders> <Loggers> <Logger name="com.indiantraditionalsnacks.db_service" level="DEBUG" additivity="false"> <AppenderRef ref="Console" level="INFO"/> <AppenderRef ref="RollingFileAppender" level="DEBUG"/> </Logger> <Root level="INFO" includeLocation="true"> <AppenderRef ref="Console" level="INFO"/> <AppenderRef ref="RollingFileAppender" level="DEBUG"/> </Root> </Loggers> </Configuration>
问题排查与解决方案
1. 补全所有starter的日志依赖排除
当前仅在spring-boot-starter-web和spring-boot-starter-test中排除了日志依赖,但spring-boot-starter-data-jpa也会默认引入spring-boot-starter-logging,需为其添加排除规则:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency>
2. 全局排除日志依赖(更简洁方式)
在pom.xml的dependencyManagement中添加全局排除,避免逐个starter配置:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement>
3. 验证依赖树
执行命令查看依赖树,确认是否还有Logback相关依赖残留:
mvn dependency:tree | grep logback
若有输出,找到对应的依赖来源并添加排除规则。
4. 修正Log4j2配置文件
- 原
RollingFile的PatternLayout中存在语法错误:%c.%M ():%L多余了空格,应改为%c.%M():%L - 添加
status="WARN"到<Configuration>标签,便于排查配置加载问题:
<Configuration status="WARN">
5. 强制指定日志配置文件
在application.properties中添加配置,明确指定Log4j2配置文件路径:
logging.config=classpath:log4j2.xml
内容的提问来源于stack exchange,提问作者Prashant Prakash
相关产品推荐
相关产品推荐

