SLF4j 和 common-logging

看如今有不少開源的軟件,log記錄都是用SLF4j,之前本身是用common-logging以爲十分方便,能夠動態的切換實際的log系統,這樣common-logging和SLF4J有什麼區別。html

 

網上找了一篇文檔,以爲說明了一些問題:java

 

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中開發日誌了。 
  
其實,這一點點工做也不算麻煩。 apache

使用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編寫日誌了。 api

相關文章
相關標籤/搜索