Gradle中Redshift JDBC与SLF4J绑定冲突:需禁用JDBC内重复日志实现
解决Redshift JDBC驱动SLF4J多绑定冲突的最优方案
我之前升级Redshift JDBC到1.3.x版本时也碰到过一模一样的问题,完全理解你不想全局排除logback-classic的顾虑——毕竟项目里其他组件大概率依赖它做日志输出。针对这个场景,最优雅的做法是只排除Redshift JDBC包自带的SLF4J绑定实现,而不是改动全局依赖。
具体Gradle配置方法
根据你使用的Gradle DSL类型,选择对应的配置:
Groovy DSL(build.gradle)
dependencies { // 引入Redshift JDBC 1.3.x版本,替换成你需要的具体版本号 implementation('com.amazon.redshift:redshift-jdbc42:1.3.45.1069') { // 根据错误日志,JDBC包带的是Log4jLoggerFactory,对应排除slf4j-log4j12 exclude group: 'org.slf4j', module: 'slf4j-log4j12' // 如果不确定具体模块,也可以直接排除所有org.slf4j的实现类模块,更保险 // exclude group: 'org.slf4j', module: '*' } // 保留项目原本的logback依赖 implementation 'ch.qos.logback:logback-classic:1.2.3' }
Kotlin DSL(build.gradle.kts)
dependencies { implementation("com.amazon.redshift:redshift-jdbc42:1.3.45.1069") { exclude(group = "org.slf4j", module = "slf4j-log4j12") // 或者保险起见排除所有org.slf4j的实现模块 // exclude(group = "org.slf4j", module = "*") } implementation("ch.qos.logback:logback-classic:1.2.3") }
验证是否生效
配置完成后,运行以下命令查看依赖树,确认Redshift JDBC的依赖中已经没有SLF4J的实现模块:
./gradlew dependencies
如果输出里redshift-jdbc42下面不再出现slf4j-log4j12(或其他SLF4J实现模块),说明配置生效,SLF4J会自动绑定到你的logback-classic上,不会再出现多绑定的警告。
补充说明
Redshift JDBC的不同版本可能附带的SLF4J绑定模块略有差异,如果排除slf4j-log4j12后还是有警告,可以通过依赖树找到JDBC包实际引入的SLF4J实现模块,再针对性排除即可。这种方式既能解决冲突,又不会影响项目其他模块的日志配置,是比全局排除更优的方案。
内容的提问来源于stack exchange,提问作者Destroy666
相关产品推荐
相关产品推荐

