Java日志框架與日志系統


隨着項目越來越復雜,誰也不能保證自己的項目在運行過程中不出現錯誤,出現錯誤並不可怕,問題是要及時的排除錯誤,讓項目更加健壯並繼續運行。排除這些錯誤就需要獲取錯誤信息,信息從哪里來呢,一個設計良好的項目,肯定記錄了項目運行的日志。更重要的是,它還能完成跟蹤調試、程序狀態記錄、崩潰數據恢復等工作。那么我們怎么樣來設計這個日志類呢?

在java的世界里,日志類一般是不需要考慮和設計的,因為存在很多優秀的日志系統,比如常見的Log4j和Logback,還又sun提供的java.util.Logging。

但是日志系統多了,也不是好事!因為在java EE的項目中,我們會引入很多的第三方包,比如Spring、Mybatis、Httpclient等等。。。每個第三方的包都會有自己的日志系統,問題就來了,如果日志系統不兼容甚至產生沖突,災難就產生了?或者是不同的日志系統打印日志的規則不同,接口也不同,那使用方就要做各種適配。。。

但是。。。。這是不可能的!!!!

日志框架解決了這些問題!!!

日志框架是什么?

先看看二者的不同定義!!!!

 

日志系統:日志的具體實現。經典的有log4j;jdk自帶的有java.util.Logging; 還有log4j作者推出的被高度評價的logBack等等;

日志框架:如果只存在一種日志系統,日志框架完全沒有必要存在(logBack無法獨立使用),但事與願違。為了解決多個日志系統的兼容問題,日志框架應運而生。主流的日志框架有commons-logging和sl4j;

commons-logging是apache推出的日志框架,commons-logging只是規定了日志的接口規范,其設計原理類似於jdk中servlet和jdbc的設計。

主流的日志系統都實現了commons-logging定義的接口,這樣就看通過commons-logging統一的使用的日志,而不用關系具體使用的是哪種日志系統。

 

日志框架

1、Commons-logging:common-logging是apache提供的一個通用的日志接口。用戶可以自由選擇第三方的日志組件作為具體實現,像log4j,或者jdk自帶的logging,common-logging會通過動態查找的機制,在程序運行時自動找出真正使用的日志庫。

Commons-logging+log4j 是經典的一個日志實現方案。出現在各種框架里。如spring 、webx 、ibatis 等等。一般為了避免直接依賴具體的日志實現,一般都是結合commons-logging 來實現。常見代碼如下:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

private static Log logger = LogFactory.getLog(XXX.class);

2、sl4j:slf4j全稱為Simple Logging Facade for JAVA,java簡單日志門面。類似於Apache Common-Logging,是對不同日志框架提供的一個門面封裝,可以在部署的時候不修改任何配置即可接入一種日志實現方案。但是,他在編譯時靜態綁定真正的Log庫。使用SLF4J時,如果你需要使用某一種日志實現,那么你必須選擇正確的SLF4J的jar包的集合。

logback+sl4j也是經典的一個日志實現方案。Logback作為一個通用可靠、快速靈活的日志框架,將作為Log4j 的替代和SLF4J 組成新的日志系統的完整實現。Logback必須配合sl4j使用。由於logback和sl4j是同一個作者,其兼容性不言而喻。但sl4j面臨與其他日志框架和日志系統的兼容性問題。常見代碼如下:

import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
  
public class A {  
    private static Log logger = LogFactory.getLog(this.getClass());  
} 

 

參考:http://blog.csdn.net/yycdaizi/article/details/8276265


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM