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

Spring集成JUnit测试时Log4j依赖冲突问题求助

解决JUnit测试中log4j-slf4j-impl与log4j-to-slf4j冲突问题

问题背景

服务运行正常,但执行JUnit测试时抛出以下错误:

Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j

问题原因

log4j-slf4j-impl与log4j-to-slf4j是互斥的日志桥接依赖:

  • log4j-slf4j-impl负责将SLF4J日志请求委托给Log4j2处理
  • log4j-to-slf4j负责将Log4j2自身的日志请求转交给SLF4J接口输出
    两者同时存在会导致日志流转的循环依赖,触发冲突报错。

解决步骤

1. 排查依赖树

先通过构建工具命令找出哪个依赖间接引入了冲突包:

  • Maven:
mvn dependency:tree
  • Gradle:
gradle dependencies

在输出结果中定位包含log4j-slf4j-impl或log4j-to-slf4j的依赖项。

2. 排除冲突依赖

根据依赖树的结果,在spring-boot-starter-test依赖中排除其中一个冲突包。例如:
如果检测到log4j-slf4j-impl被引入,修改pom.xml如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

如果冲突源是log4j-to-slf4j,则替换排除对应的artifactId即可。

3. 检查其他依赖

如果排除后仍有报错,检查项目中其他依赖是否也引入了这两个冲突包,重复排除操作直至消除所有冲突。

额外提示

业务类中的日志初始化建议使用SLF4J标准的LoggerFactory(确保导入正确的包):

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserBusinessService {
    static Logger logger = LoggerFactory.getLogger(UserBusinessService.class);
    // ... 其他代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:00:22