java - JBOSS 中的多个 SLF4J 绑定(bind)导致错误

标签 java binding jboss slf4j

我们的应用程序将多个 EAR 部署到单个 JBOSS-AS。

每个 EAR 都使用 SLF4J 进行日志记录,它在 WAR 的库中可用。我们也有单独部署 EAR 的情况。

以下是我们针对单个 EAR 获得的部署错误。我们为每个 EAR 获得了类似的错误。

2011-07-07 23:27:52,794 ERROR [STDERR] (main) SLF4J: Class path contains multiple SLF4J bindings.
2011-07-07 23:27:52,794 ERROR [STDERR] (main) SLF4J: Found binding in [vfszip:/jboss-as/common/lib/lib/slf4j-jboss-logging.jar/org/slf4j/impl/StaticLoggerBinder.class]
2011-07-07 23:27:52,794 ERROR [STDERR] (main) SLF4J: Found binding in [vfszip:/Product_Ear.ear/Product_War.war/WEB-INF/lib/slf4j-jcl-1.5.8.jar/org/slf4j/impl/StaticLoggerBinder.class]
2011-07-07 23:27:52,794 ERROR [STDERR] (main) SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

此错误是因为根据说明 URL,我们有多个 SLF4j 绑定(bind)。

问题:

  1. Shouldn't that be a WARNING instead of an ERROR?

  2. Is there any way how to run it without errors and without removing slf4j-jcl-1.5.8.jar from WARs?


旁注: 即使大多数 EAR 出现错误,也不会因此出现其他问题。 每个缩进功能都运行良好。

最佳答案

slf4j 的这种行为是设计使然。如果您不喜欢它,您必须在 slf4j 站点上提交错误报告。

问题是 JBoss 在它的默认类加载器中提供了一个 slf4j 绑定(bind),而你自带了。我对 JBoss 不够熟悉,不能说 common/lib 中的 slf4j jar 是否默认可用,或者如果你把它放在那里,但在那个位置你可能无法禁用它。您可能想在 jboss 站点上提交错误报告。

问题源于我认为在 servlet 规范中没有明确说明 Web 容器类加载器应该提供什么以及不应该提供什么。因此会有部署问题。

唯一的解决方法是删除您自己的 slf4j 绑定(bind)并登录到 jboss 记录器。

但请注意,如果您让 Web 容器进行日志记录,这对您来说是最跨平台的,因为规范不能保证您可以访问文件系统。

关于java - JBOSS 中的多个 SLF4J 绑定(bind)导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621273/

相关文章:

java - Android/Java 中使用 GZip 编码的 HttpGet

java - 集群模式下的自动故障转移处理已禁用 Redis ElastiCache

java - 如何清除内存以防止java.lang.OutOfMemoryError

java - 使用多个类时输出奇怪

WPF ComboBox 绑定(bind)到非字符串对象

java - JBOSS V/s apache tomcat

jboss - 是否可以在同一个网站上使用两个不同版本的 JasperServer?

java - 将 java 类作为闭包绑定(bind)到 groovy 脚本中

c++ - Cocos2d-x lua绑定(bind)

java - 安装 JBoss 后 Eclipse 不断崩溃