Tomcat 多个 SLF4j 绑定中的静态绑定

Static Binding in Tomcat Multiple SLF4j Bindings

我有一个 gradle java 项目,我使用 Spring Boot 来部署。当我使用我的 jar 文件启动 Spring-Boot 时,我收到以下 warning:

SLF4J: Class path contains multiple SLF4J bindings

SLF4J: Found binding in [apache-tomcat-8.0.23/lib/activemq-all-5.11.1jar!/org/slf4j/impl/StaticLoggerBinder.class

SLF4J: Found binding in [apache-tomcat-8.0.23/webapps/ProjectName/WEB-INF/lib/activemq-all-5.11.1jar!/org/slf4j/impl/StaticLoggerBinder.class

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

为了删除此绑定 warning,我进入了我的 gradle 打包程序项目,该项目为 Spring-Boot 创建了 jar 文件并执行了 dependencyInsight 跟踪 activemq-all jar 并替换为解释的底层 jar here

我在我的项目中找到了这个 activemq-all jar 的一个实例:

:dependencyInsight
org.apache.activemq-all:5.9.1
/--- com.company.projectName:projectTitle:1.1.0
    /--- compile

我参与了这个项目。将 activemq-all 依赖项替换为上面 link 中显示的相应 jar(因此 slf4j-log4j12 未包含在 uber jar 中)。再次构建项目,使用我创建的新 jar 更新我的缓存,然后重新运行创建我的 war 文件的打包程序项目。但是,activemq-all jar 仍然存在。我可以从本地缓存中删除它,但在 gradle 刷新时它会被替换。有没有一种特殊的方法可以从我的项目中删除这种传递依赖关系,以便我可以解决这个绑定问题,或者我对从我的项目中删除依赖关系有什么误解?我觉得好像 dependencyInsight 没有正确映射我的 activemq-all jar 的依赖项。

如果您需要更多信息,请告诉我。

解决方案:activemq-all jar 包含与 slf4j 绑定的 log4j(版本 1)。这导致我的 log4j2 配置无用,并且 log4j 不断抱怨,因为不再有 log4j 配置。当结果证明是 log4j1 配置问题时,我正在追查 log4j2 问题。在我的项目中,我用解决方案 here 替换了 activemq-all jar 并添加了所有必要的桥接以将我的所有日​​志桥接到 slf4j,然后有一个(而且只有一个!)与 log4j2 绑定。