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

Spring Boot调用时Log4j不输出到文件,命令行调用正常如何解决?

解决方案

根因说明

Spring Boot 默认内置Logback作为日志实现,自动配置的优先级高于你手动引入的log4j2依赖,因此启动REST服务时会优先使用Logback加载配置,你写的log4j2.xml未被识别生效,日志只会输出到控制台;而命令行启动的入口没有触发Spring的日志自动装配逻辑,所以可以正常加载log4j2配置写入文件。

修复步骤

1. 排除Spring Boot默认日志依赖

在Spring Boot服务模块的pom.xml中,找到spring-boot-starter或spring-boot-starter-web依赖,添加排除规则移除默认的Logback相关依赖:

<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>
    </exclusions>
</dependency>

2. 引入Spring Boot官方Log4j2 Starter

你当前仅引入了log4j-slf4j-impl依赖不够适配Spring Boot环境,替换为官方提供的log4j2启动器,自动完成版本适配避免冲突:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

无需额外指定版本,会自动继承父pom中Spring Boot对应的版本号。

3. 调整配置文件位置

如果是多模块项目,需要将log4j2.xml放到Spring Boot启动类所在模块的src/main/resources根目录下,确保Spring Boot启动时可以扫描到该配置文件。

4. 可选:显式指定配置文件路径

如果需要自定义配置文件位置,可以在Spring Boot的application.properties中添加如下配置:

logging.config=classpath:log4j2.xml

也可以在启动服务时通过JVM参数指定:

java -jar your-spring-boot-app.jar -Dlogging.config=classpath:log4j2.xml

其他说明

你当前log4j2.xml中File Appender的append属性配置为false,每次服务重启都会覆盖旧的task.log文件,如果需要保留历史日志可以修改为true。

内容的提问来源于stack exchange,提问作者Matteo NNZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 07:45:04