You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:55:29