SLF4j 和 common-logging

來源:互聯網
上載者:User

標籤:style   http   color   os   使用   java   ar   strong   檔案   

看現在有很多開源的軟體,log記錄都是用SLF4j,以前自己是用common-logging覺得十分方便,可以動態切換實際的log系統,這樣common-logging和SLF4J有什麼區別。

 

網上找了一篇文檔,覺得說明了一些問題:

 

Apache Common-Logging是廣泛使用的Java日誌門面庫。我以前一直都使用它和log4j編寫日誌。 
Apache Common-Logging通過動態尋找的機制,在程式運行時自動找出真正使用的日誌庫。 
Apache Common-Logging一直都運作得很好。直到最近,我寫OSGI外掛程式時,它不能工作了。 
原因是Apache Common-Logging使用了ClassLoader尋找和載入底層的日誌庫。而OSGI中,不同的外掛程式使用自己的ClassLoader。 
一個線程的ClassLoader在執行不同的外掛程式時,其執行能力是不同的。 
OSGI的這種機制保證了外掛程式互相獨立,然而確使Apache Common-Logging無法工作! 
  
解決之道是使用新的日誌門面庫Slf4j。 
Slf4j庫類似於Apache Common-Logging。但是,他在編譯時間靜態繫結真正的Log庫。使用Slf4j時,如果你需要使用某一種日誌實現,那麼你必須選擇正確的Slf4j的jar包的集合。 
這確實麻煩了一點,但總算可以在OSGI中開發日誌了。 
  
其實,這一點點工作也不算麻煩。 

使用CommonLog介面而實際由Slf4j和Log4j實現的過程 
1,項目中照常使用 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
編寫日誌。 
  
2,仍然在src下使用log4j.properties檔案進行配置。 
  
3,使用的所有jar檔案: 
1)log4j-1.2.15.jar 這是log4j的庫。 Slf4j並不改變這個底層實現庫。 
2)slf4j-api-1.5.2.jar   這是Slf4j庫。  
3)slf4j-log4j12-1.5.2.jar 這包含Log4j的適配器和靜態繫結log4j底層實現。 
4)jcl-over-slf4j-1.5.2.jar 這提供了Commons-Logging介面,以及使用common-loggin的介面,底層還是由SLF4J來決定哪種實現機制 。 
  
    這裡,我們需要使用Log4j的原生庫,但是不需要Commons-Logging的原生庫。 
   
OK,把上面這4個jar包複製到lib下,匯入項目中,就可以像以往一樣繼續使用Apache Common-Logging編寫日誌了。 


SLF4j 和 common-logging

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.