我们的应用程序将多个 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)。
问题:
Shouldn't that be a WARNING instead of an ERROR?
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/