SLF4j 和 common-logging
看現在有很多開源的軟件,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中開發日志了。
其實,這一點點工作也不算麻煩。
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!