Vaadin 24.3升级后Logback LoggerFactory抛出IllegalArgumentException
解决Vaadin 24.3升级后Spring日志框架冲突问题
升级Vaadin到24.3版本后,项目启动失败,抛出日志框架冲突异常:类路径中同时存在Logback和Log4j的SLF4J实现。之前通过排除spring-boot-starter-logging的Gradle配置失效,原因是spring-boot-starter-web:3.2.0直接引入了Logback依赖。
最完善的解决方案:使用Spring Boot官方Log4j2 Starter
Spring Boot提供了spring-boot-starter-log4j2,引入后会自动替换默认的Logback日志配置,无需手动逐个排除依赖,符合官方依赖管理规范。
添加以下Gradle配置:
dependencies { // 引入Log4j2 Starter,自动排除spring-boot-starter-logging及相关Logback依赖 implementation 'org.springframework.boot:spring-boot-starter-log4j2' // 项目原有依赖示例 implementation 'com.vaadin:vaadin-spring-boot-starter:24.3.x' implementation 'org.springframework.boot:spring-boot-starter-web' } // 兜底配置:防止其他第三方依赖偷偷引入Logback(可选但建议保留) configurations { all { exclude group: 'ch.qos.logback', module: 'logback-classic' exclude group: 'ch.qos.logback', module: 'logback-core' } }
备选方案:手动优化排除规则
如果不想使用官方Starter,可通过全局排除所有Logback依赖,并确保Log4j2的SLF4J桥接包正常引入:
configurations { developmentOnly runtimeClasspath { extendsFrom developmentOnly } all { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' exclude group: 'ch.qos.logback', module: 'logback-classic' exclude group: 'ch.qos.logback', module: 'logback-core' } } dependencies { // 引入Log4j2核心及SLF4J桥接包 implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.20.0' implementation 'org.apache.logging.log4j:log4j-core:2.20.0' implementation 'org.apache.logging.log4j:log4j-api:2.20.0' // 项目原有依赖示例 implementation 'com.vaadin:vaadin-spring-boot-starter:24.3.x' implementation 'org.springframework.boot:spring-boot-starter-web' }
验证方法
运行gradle dependencies命令,搜索logback关键字,确认类路径中已无任何Logback相关依赖;同时确认log4j-slf4j2-impl存在,确保日志桥接正常。
内容的提问来源于stack exchange,提问作者K. Taylor
相关产品推荐
相关产品推荐

