我正在使用SLF4J + LogBack来处理我的日志记录,并使用适当的jar来路由其他日志记录框架调用。但是我遇到了这里提到的问题: http://www.slf4j.org/legacy.html#log4j-over-slf4j
我在NoSuchMethodError
(特别是Appender
)的电话中收到Category.getRoot()
的位置。
它提到使用log4j.properties
或log4j.xml
文件应该解决这些问题,但我不确定该配置文件的外观(使用哪些appenders和类别),或者放置它(与logback.xml相同的位置?)
我也看到了这个: Issues replacing Log4j with LogBack, log4j-over-slf4j.jar shortcomings
这似乎基本上是同一个问题,但从未真正回答。
答案 0 :(得分:2)
log4j的Appender
和Category
类包含一些可以更改日志记录配置的方法(例如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.xml
或log4j.properties
,log4j-over-slf4j
模块将正常工作,因为应用程序不使用{{1的配置方法和类别(可能是其他)类。它仅使用log4j进行日志记录,而不是对其进行配置,并且log4j-over-slf4j模块中存在所需的logger方法。因此,如果您的应用程序使用配置方法,则必须修改代码。