2011-08-13 50 views
2

我正在使用SLF4J + LogBack來處理我的日誌記錄,並有適當的JAR來路由其他日誌框架調用。不過我已經運行在整個問題注意這裏: http://www.slf4j.org/legacy.html#log4j-over-slf4jSLF4J log4j NoSuchMethodError在類別

凡在我上的Appender(特別Category.getRoot())調用得到一個NoSuchMethodError

它提到使用log4j.propertieslog4j.xml文件應該可以解決這些問題,但我不能完全肯定的配置文件是什麼樣子(其中追加程序和類別使用),或在哪裏放置(相同的位置,在logback.xml)

我也看到了這一點:這似乎 Issues replacing Log4j with LogBack, log4j-over-slf4j.jar shortcomings

到是基本相同的問題,但從來沒有真正回答。

回答

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的環比SLF4J模塊應該只是正常工作。

這只是意味着,如果你的應用程序的日誌記錄與log4j.xmllog4j.properties僅配置了log4j-over-slf4j模塊將正常工作,因爲應用程序不使用Appender和類別(也許其他)類的配置方法。它僅使用log4j進行日誌記錄,而不是配置它,並且log4j-over-slf4j模塊中存在所需的日誌記錄方法。所以,如果您的應用程序使用配置方法,您必須修改代碼。

+0

所以你說的是,我的閱讀理解技能需要更好一點。 ;-) –

+1

不,我不是:-)這是一個非常好的問題。 SLF4J文檔應該改進,現在很混亂。 – palacsint