SLF4j 和 common-logging

jopen 10年前發布 | 65K 次閱讀 SLF4j 日志處理

看現在有很多開源的軟件,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;</span> 
import org.apache.commons.logging.LogFactory;</span> 
編寫日志。 
  
2,仍然在src下使用log4j.properties文件進行配置。 
  
3,使用的所有jar文件: 
1)log4j-1.2.15.jar 這是log4j的庫。 Slf4j并不改變這個底層實現庫。 
2)slf4j-api-1.5.2.jar   </span>這是Slf4j庫。  
3)slf4j-log4j12-1.5.2.jar 這包含Log4j的適配器和靜態綁定log4j底層實現。 
4)jcl-over-slf4j-1.5.2.jar 這提供了Commons-Logging接口,以及使用common-loggin的接口,底層還是由SLF4J來決定哪種實現機制 。 
  
    </span>這里,我們需要使用Log4j的原生庫,但是不需要Commons-Logging的原生庫。 
   
OK,把上面這4個jar包復制到lib下,導入項目中,就可以像以往一樣繼續使用Apache Common-Logging編寫日志了。

來自:http://my.oschina.net/u/1254322/blog/314029

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!