类别上的SLF4J log4j NoSuchMethodError

时间:2011-08-13 05:02:01

标签: java log4j slf4j logback

我正在使用SLF4J + LogBack来处理我的日志记录,并使用适当的jar来路由其他日志记录框架调用。但是我遇到了这里提到的问题: http://www.slf4j.org/legacy.html#log4j-over-slf4j

我在NoSuchMethodError(特别是Appender)的电话中收到Category.getRoot()的位置。

它提到使用log4j.propertieslog4j.xml文件应该解决这些问题,但我不确定该配置文件的外观(使用哪些appenders和类别),或者放置它(与logback.xml相同的位置?)

我也看到了这个: Issues replacing Log4j with LogBack, log4j-over-slf4j.jar shortcomings

这似乎基本上是同一个问题,但从未真正回答。

1 个答案:

答案 0 :(得分:2)

log4j的AppenderCategory类包含一些可以更改日志记录配置的方法(例如Category.addAppender())。由于slf4j只是一个简单的日志记录,配置完全依赖于底层日志框架(logback,log4j,java-util-logging等),因此slf4j不支持这些方法。

检查source code of the Category class of the log4j-over-slf4j module,没有getRoot()方法。我不认为任何属性或xml文件会改变它。来自http://www.slf4j.org/legacy.html#log4j-over-slf4j

  

但是,当通过配置文件配置log4j时,无论是log4j.properties还是log4j.xml,log4j-over-slf4j模块应该可以正常工作。

这只是意味着如果您的应用程序的日志记录仅配置log4j.xmllog4j.propertieslog4j-over-slf4j模块将正常工作,因为应用程序不使用{{1的配置方法和类别(可能是其他)类。它仅使用log4j进行日志记录,而不是对其进行配置,并且log4j-over-slf4j模块中存在所需的logger方法。因此,如果您的应用程序使用配置方法,则必须修改代码。