2012-02-21 35 views
5

如果使用的是混凝土框架(如log4j的)第三方依賴日誌,我想我的應用程序做通過SLF4J所有的日誌記錄,那麼是有可能配置log4j(無論是在XML,屬性文件,等等)將日誌消息重定向到slf4j API? (其中,在運行時,會綁定到一個具體的SLF4J我選擇的結合。)重路由的log4j到SLF4J

這純粹是很好得到所有日誌消息通過相同的API去同一個地方。

我甚至不介意我需要做些什麼有點瘋狂,像log4j.properties到一些臨時代碼(我會寫),這反過來將流量指向slf4j!

我只是不知道從哪裏開始。提前致謝!

回答

4

當然可以,它是在documentation有詳盡的解釋:

log4j-over-slf4j

SLF4J附帶一個名爲log4j-over-slf4j模塊。它允許log4j用戶將現有應用程序遷移到SLF4J,而無需更改一行代碼,只需將log4j.jar文件替換爲log4j-over-slf4j.jar即可,如下所述。

這是既hacky和巧妙 - 你正在刪除log4j.jar並用log4j-over-slf4j.jar取代它。後者的JAR將Log4J類映射到相同的包中,因此您的應用程序和庫甚至不必重新編譯。但新的實現僅僅是重新路由到SLF4J。

+0

唉唉,所以SLF4J * *結合結合SLF4J一些底層日誌記錄系統,但SLF4J *橋*映射/重定向一些底層日誌記錄系統SLF4J。這是一個公平的斷言嗎? – IAmYourFaja 2012-02-21 20:48:33

+0

@herpylderp:是的!此外,您必須只有一個SLF4J綁定,但任意數量的網橋。 – 2012-02-21 20:50:09

+1

警告了'log4j的環比slf4j.jar'是部分實現的'log4j' API,因此,如果您的圖書館使用的橋沒有實現一些類,你會得到ClassNotFound的錯誤 – 2013-01-22 08:27:27