java - 如何将多个 SLF4J 绑定(bind)排除到 LOG4J

标签 java logging gradle slf4j log4j2

我遇到了错误

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.apache.logging.log4j/log4j-slf4j-impl/2.0-beta8/jar/15984318e95b9b0394e979e413a4a14f322401c1/log4j-slf4j-impl-2.0-beta8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.slf4j/slf4j-log4j12/1.5.0/jar/aad1074d37a63f19fafedd272dc7830f0f41a977/slf4j-log4j12-1.5.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

在我的 build.gradle 文件中,我有以下行来包含 jar log4j-slf4j-impl-2.0-beta8.jar(我想绑定(bind)到 LOG4J2)

 compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta8' 

在依赖项目的另一个 build.gradle 文件中,我有多行类似于以下内容:

 compile 'dcm4che:dcm4che-core:2.0.23'

现在 dcm4che 包含对 log4j 版本 1 (slf4j-log4j12) 的依赖,因此它被包含在整个项目中。

这是 Gradle 依赖树的一个片段:

|    +--- dcm4che:dcm4che-core:2.0.23
|    |    \--- org.slf4j:slf4j-log4j12:1.5.0
|    |         +--- org.slf4j:slf4j-api:1.5.0 -> 1.7.5
|    |         \--- log4j:log4j:1.2.13 -> 1.2.14

我已阅读链接 suggested in the warning但我无法弄清楚如何使用我想要的 jar 使我的应用程序绑定(bind)到 log4j2。 关于依赖管理的 Gradle 文档并没有真正让它变得更清晰。

最佳答案

将此代码放入您的build.gradle 文件

configurations.all {
   exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}

关于java - 如何将多个 SLF4J 绑定(bind)排除到 LOG4J,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18952479/

相关文章:

android - gradle项目中输入流不能为空异常

gradle - 执行Gradle构建时如何跳过初始化脚本

android - 为什么 appcompat-v7 不能在库模块中使用 compileOnly

java - 货币 - 仅当小数位数超过 2 位时才舍入 double 值

java - CopyOnWriteArraySet 中不允许重复,即使它使用内部 CopyOnWriteArrayList 进行所有操作

java - 在服务类中共享 Intent

javascript - Selenium 点击链接href与javascript

java - 记录方法的名称和参数

logging - Pentaho数据集成,更改日志格式

java - 尝试执行 jar 时出现错误 java.lang.ClassNotFoundException : org. slf4j.LoggerFactory