- 日誌的重要性是隨着系統的膨脹而顯現的,在一個龐大的系統中查錯沒有各類日誌信息 是步履維艱的。因此在系統加入日誌是必須的。
- 最原始的日誌方式,就是在程序的適當地方添加System.out.println()方法,可是帶來 的問題是,系統穩定後,日誌太大,若是要減小日誌量,就須要從新修改程序,雖然只 是註釋掉System.out.println()方法。可是萬一系統再次出錯,又要改。
- commons-logging提供分級日誌功能,至關於把System.out.println()方法增強了,原來 是必定輸出到控制檯,如今commons-logging有6級日誌,可是apache建議使用4級,即 ERROR、WARN、INFO、DEBUG。什麼狀況下輸出日誌由程序中寫日誌的方法決定,輸出什 麼級別以上的日誌和輸出到哪裏由配置文件決定。
- 使用commons-logging以下:
//導入類 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TestLog { //獲取以當前類爲參數的日誌對象 private static Log log = LogFactory.getLog(TestLog.class); public static void main(String[] args){ //輸出4種不一樣級別的日誌 log.debug("111"); log.info("222"); log.warn("333"); log.error("444"); } }
- 固然還要配置commons-logging.properties文件,其中定義輸出哪一個級別以上的日誌。
- 好像這就完了,和log4j沒啥關係。那麼爲何通常系統都會使用commons-logging和 log4j兩個包來記錄日誌呢?
- 緣由就是commons-logging的輸出功能比較弱,也就是輸出格式和輸出設備選擇有限,只 有原生輸出類org.apache.commons.logging.impl.SimpleLog。可是它提供了一個通用的 日誌接口org.apache.commons.logging.log,讓其餘的包來實現複雜的輸出。其中就有 Jdk14Logger, Log4JLogger,前面是jdk1.4以後加入的,後面就是log4j中的類。
- log4j也能夠直接像commons-logging同樣在程序中定義輸出信息,而後再配置文件中定 義輸出級別,可是這樣作就會使程序惟一的和log4j綁定(若是你必定要單獨使用 log4j,那麼也是能夠的),並且commons-logging更加智能,幫咱們自動選擇"適當的" 日誌實現系統:
1) 首先在classpath下尋找本身的配置文件commons-logging.properties,若是找到,則
使用其中定義的Log實現類;
2) 若是找不到commons-logging.properties文件,則在查找是否已定義系統環境變量
org.apache.commons.logging.Log,找到則使用其定義的Log實現類;
3) 不然,查看classpath中是否有Log4j的包,若是發現,則自動使用Log4j做爲日誌實現類;
4) 不然,使用JDK自身的日誌實現類(JDK1.4之後纔有日誌實現類);
5) 不然,使用commons-logging本身提供的一個簡單的日誌實現類SimpleLog;
- 因此,在前面程序的基礎上,只要導入log4j的包,則commons-logging會自動使用 log4j做爲輸出類,程序不須要任何改動,可是注意:log4j的配置文件 log4j.properties對Log4j來講是必須的。若是classpath中沒有該配置文件,或者配置 不對,將會引起運行時異常。因此下面介紹log4j.properties的配置。