java - 类别上的 SLF4J log4j NoSuchMethodError

标签 java log4j slf4j logback

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

我在调用 Appender(特别是 Category.getRoot())时收到 NoSuchMethodError

它提到使用 log4j.propertieslog4j.xml 文件应该可以解决这些问题,但我不确定该配置文件是什么样的(使用哪些附加程序和类别),或者将其放置在何处(与 logback.xml 相同的位置?)

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

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

最佳答案

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 :

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.xmllog4j.properties log4j-over-slf4j 模块进行配置将工作正常,因为应用程序不使用 Appender 和类别(可能还有其他)类的配置方法。它仅使用 log4j 进行日志记录,而不是对其进行配置,并且所需的记录器方法存在于 log4j-over-slf4j 模块中。因此,如果您的应用程序使用配置方法,您必须修改代码。

关于java - 类别上的 SLF4J log4j NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7048687/

相关文章:

java - 反序列化失败时的 Kafka 消费者行为

java - 日志文件未使用 java 中的 log4j 更新/创建

java - SLF4J,通用日志记录,控制台输出

java - 如何将日志模式应用于 SLF4J _和_ JUL?

scala - 使用 sbt 和 testng 时,如何获得测试中引发的异常的完整堆栈跟踪?

java - 插页式广告未展示

java - JFrame : 'Random' size?

java - Angular、JSON map 数据不会转换为 map

java - Log4J2 在appender中设置参数

log4j - 更改soapui-log4j.xml 后,SoapUI 不会更改日志文件名/路径