【问题标题】:SLF4J log4j NoSuchMethodError on Category类别上的 SLF4J log4j NoSuchMethodError
【发布时间】:2011-08-13 05:02:01
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: java log4j slf4j logback


    【解决方案1】:

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

    【讨论】:

    • 所以你的意思是,我的阅读理解能力需要提高一点。 ;-)
    • 不,我不是 :-) 这是一个非常好的问题。 SLF4J 文档应该改进,现在很混乱。
    猜你喜欢
    • 2020-07-13
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2017-01-26
    • 2011-11-20
    • 2013-10-16
    相关资源
    最近更新 更多