有谁能告诉我slf4j-log4j和log4j-over-slf4j之间的区别?哪个在Java Web应用程序中使用更标准?我目前在类路径上都有这两个因为Web服务器试图阻止StackOverFlowException
发生而导致运行时异常。
例外:
java.lang.IllegalStateException:
在类路径上检测到log4j-over-slf4j.jar和slf4j-log4j12.jar
答案 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
异常消息误导我