2012-04-20 59 views
15

我知道它的軟件包差Logger.getLogger(className)和LogFactory.getLog(className)之間的區別?

1)org.apache.log4j.Logger logger = Logger.getLogger(clazz);

2)org.apache.commons.logging.Log log = LogFactory.getLog(clazz);

第一個經由log4j使用記錄器和第二個使用commons.logging。我們有一個巨大的項目,在某些類別中,記錄器使用log4j進行配置,在某些情況下,其配置爲commons.logging

我確實找到了一個log4j屬性文件雖然。是否有類似的屬性文件爲commons.logging?我在哪裏配置公用日誌記錄?我無法看到由commons-logging生成的日誌。

任何幫助表示讚賞。

+2

Commons日誌記錄包裝其他日誌庫;如果你使用的是log4j,它會使用該配置文件。 – 2012-04-20 13:00:43

+0

那麼常用日誌在內部使用Log4j?請解釋你的意思。我對此一無所知。 – 2012-04-20 13:01:55

+0

您可以使用commons-logging.properties文件 – Satya 2012-04-20 13:02:03

回答

9

是的,共享記錄是一個正面的API,它是假設抽象您從底層的日誌框架(在實踐中出現了java.util.logging之間的選擇),這樣你可以從一個切換到另一個不碰代碼 - 只是通過切換CLASSPATH上的庫。

不幸的是,由於一些設計錯誤,它在複雜的類加載環境(例如應用程序服務器)方面存在問題。目前它已被有效取代。

在你的情況下,我會建議堅持使用一個API - 無論是Log4J還是commons-logging,儘管commons-logging將(很可能)委託給log4J。您也可以遷移到使用SLF4J並安裝橋接API,但這稍微更先進。

+0

我認爲你的意思是代替...不被壓制。 – 2012-04-20 13:14:44

+1

@Tomasz Nurkiewicz:我可以看到通過log4j配置的記錄器,而來自commons-logging的記錄器沒有生成。你認爲有些配置問題? – 2012-04-20 13:27:42

+0

@StephenC:當然,謝謝! – 2012-04-20 13:29:15