Spring Boot启动报Application run failed日志类转换异常咨询
Spring Boot启动报错ClassCastException: org.jboss.logging.Log4j2Logger无法转换为org.apache.logging.log4j.Logger解决方法
问题根因
从错误栈可定位核心问题:日志类加载冲突。你在StudentController类第17行初始化日志实例时,jboss-logging包提供的Log4j2Logger实现类,和代码中声明的org.apache.logging.log4j.Logger类型不兼容,触发类转换异常,导致Bean初始化失败、应用启动终止。
排查解决步骤
- 第一步:检查日志声明代码
打开StudentController.java,定位第17行的日志声明逻辑,确认导入和初始化代码是否正确。
正确的Log4j2日志声明代码如下:
如果你的代码中导入了// 注意导入的是apache的日志类 import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class StudentController { // 第17行左右的初始化逻辑 private static final Logger logger = LogManager.getLogger(StudentController.class); // 其他代码 }org.jboss.logging.Logger,或者使用了jboss的LoggerFactory获取实例后强转为apache的Logger,直接修改为上述正确写法即可解决问题。 - 第二步:排查依赖冲突
如果代码写法无误,说明项目依赖传递引入了冲突的日志包:- Maven项目执行
mvn dependency:tree,Gradle项目执行gradle dependencies,检查所有日志相关依赖,排查是否有重复引入、版本不匹配的log4j、jboss-logging、slf4j相关包。 - 如果你自定义使用Log4j2作为日志实现,需要先排除Spring Boot默认的logback依赖,pom.xml参考配置如下:
<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> <!-- 引入官方log4j2启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>- 如果是第三方依赖传递引入了冲突的
jboss-logging包,在对应依赖下添加exclusion排除即可:
<exclusion> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> </exclusion> - Maven项目执行
- 第三步:清理重建项目
依赖修改完成后,执行mvn clean install(Gradle执行gradle clean build)清理旧编译产物,重新启动项目即可。
内容的提问来源于stack exchange,提问作者Bhuvana Arumugam
相关产品推荐
相关产品推荐

