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

时间:2013-08-19 17:59:51

标签: java log4j slf4j

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

例外:

  

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

2 个答案:

答案 0 :(得分:21)

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

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

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

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

通常,如果您的项目已经使用了log4j,并且您无法将所有log4j记录器更新为slf4j记录器; log4j-over-slf4j是一个快速修复,可以立即开始使用slf4j。

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

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

答案 1 :(得分:2)

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

activemq-all-5.7.0.jar

不在slf4j-log4j12.jar

异常消息误导我