我正在使用 SLF4J + LogBack 来处理我的日志记录,并有适当的 jar 来路由其他日志记录框架调用。但是我遇到了这里提到的问题: http://www.slf4j.org/legacy.html#log4j-over-slf4j
我在调用 Appender
(特别是 Category.getRoot()
)时收到 NoSuchMethodError
。
它提到使用 log4j.properties
或 log4j.xml
文件应该可以解决这些问题,但我不确定该配置文件是什么样的(使用哪些附加程序和类别),或者将其放置在何处(与 logback.xml 相同的位置?)
我还看到了这个: Issues replacing Log4j with LogBack, log4j-over-slf4j.jar shortcomings
这似乎是同一个问题,但从未真正回答过。
最佳答案
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 :
However, when log4j is configured through a configuration file, be it log4j.properties or log4j.xml, the log4j-over-slf4j module should just work fine.
这只是意味着,如果您的应用程序的日志记录仅使用 log4j.xml
或 log4j.properties
log4j-over-slf4j
模块进行配置将工作正常,因为应用程序不使用 Appender
和类别(可能还有其他)类的配置方法。它仅使用 log4j 进行日志记录,而不是对其进行配置,并且所需的记录器方法存在于 log4j-over-slf4j 模块中。因此,如果您的应用程序使用配置方法,您必须修改代码。
关于java - 类别上的 SLF4J log4j NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048687/