【问题标题】:java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class patjava.lang.IllegalStateException:在类 pat 上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar
【发布时间】:2013-08-21 14:59:12
【问题描述】:

谁能告诉我 slf4j-log4j 和 log4j-over-slf4j 之间的区别?在 Java Web 应用程序中使用哪个更标准?我目前在类路径上都有这两个,这导致运行时异常,因为 Web 服务器试图阻止 StackOverFlowException 发生。

例外:

java.lang.IllegalStateException:
在类路径上检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar

【问题讨论】:

  • 删除两者是个好主意。
  • 我建议您检查两者的内容并弄清楚它们有何不同。
  • 这取决于 Web 框架和日志实现。它也取决于服务器,但这是一个不同的问题。
  • 好像用slf4j和logback很流行

标签: java log4j slf4j


【解决方案1】:

在我的项目中,org.slf4j.impl.Log4jLoggerFactory

activemq-all-5.7.0.jar

不在slf4j-log4j12.jar

异常信息误导了我

【讨论】:

    【解决方案2】:

    slf4j-log4j 正在使用 log4j 作为 slf4j 的实现。

    log4j-over-slf4j 导致对 log4j API 的调用被“路由”到 slf4j。

    You cannot use both of these JAR's at the same time.

    两者都是可以使用的有效库,并且同样“标准”,这取决于项目。

    一般来说,如果您的项目已经在使用 log4j,并且您没有能力将所有 log4j Loggers 更新为 slf4j Loggers; log4j-over-slf4j 是一个快速修复,可以立即开始使用 slf4j。

    但是,如果您的项目是新项目或没有现有的日志记录机制并且您选择使用 slf4j,那么 slf4j-log4j 将是可行的方法,因为它只是指定 slf4j 应该绑定到 log4j。

    话虽如此,我同意 c12 的评论。停止使用 log4j,改用 slf4j 和 logback。

    【讨论】:

    • 完全有效且完整的答案
    • 虽然你的回答完美救了我,谢谢!但是排除可能的依赖项看起来有点骇人听闻。是否有任何通用定义可以指导 maven 在所有底层应用排除?
    猜你喜欢
    • 2020-09-20
    • 2018-09-25
    • 1970-01-01
    • 2023-03-21
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多