log4j學習

1.log4j包含三個組件,分別是:LOGS(記錄器)、Appenders(輸出源)、layouts(輸出源)!可以簡單的認爲是日誌類別、日誌輸出到什麼地方、日誌以何種形式輸出。

1、 Loggers   

         Loggers組件在此係統中被分爲五個級別:(最小)DEBUG、INFO、WARN、ERROR和FATAL(最大)。這五個級別是有順序的,DEBUG Log4j有一個規則:假設Loggers級別爲P,如果在Loggers中發生了一個級別Q比P高,則可以啓動,否則屏蔽掉。 假設你定義的級別是info,那麼error和warn的日誌可以顯示而比他低的debug信息就不顯示了。  

        其語法表示爲:  

       org.apache.log4j.ConsoleAppender(控制檯)  

       org.apache.log4j.FileAppender(文件)  

       org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)

       org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)  

       org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

1.Logger類
通過Logger類的靜態方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通過靜態方法Logger.getLogger來實例化並獲取的。這個方法Logger.getLogger把所想要的logger的名字作爲參數。 Logger類的一些其它基本方法在下面列出:

 

package org.apache.log4j;
publicclass Logger {
// Creation and retrieval methods:
publicstatic Logger getRootLogger();
publicstatic Logger getLogger(String name);
// printing methods:
publicvoid debug(Object message);
publicvoid info(Object message);
publicvoid warn(Object message);
publicvoid error(Object message);
publicvoid fatal(Object message);
// generic printing method:
publicvoid log(Level l, Object message);
}
2. getLogger方法
以一樣的參數名字調用getLogger方法,返回的reference總是指向完全相同的logger對象。例如,在這裏:

 

Logger x = Logger.getLogger("wombat");
Logger y = Logger.getLogger("wombat");
x和y指向完全相同的logger對象。
3.Log4j使用流程
1)根據配置文件初始化log4j
       log4j可以使用3種配置器來初始化:
BasicConfigurator,DOMConfigurator,PropertyConfigurator。
這裏用的是PropertyConfigurator。使用PropertyConfigurator適用於所有的系統。如下的語句。

 

PropertyConfigurator.configure("log4j.properties");
就以log4j.properties爲配置文件初始化好了log4j環境。對於一般的java project 可以不使用上面的語句初始化log4j,log4j會自動在classpath下,找到配置文件並初始化。如果log4j不能自動初始化配置文件,那麼就需要用上面的方法進行初始化。
       注意:初始化配置文件,最好只在系統啓動的時候執行一次,如果執行多次,一是浪費資源,二就是對於老版本的log4j,使用DailyRollingFileAppender時,可能會出現問題。
2)導入org.apache.log4j.Logger;及相關包。
3)在需要使用log4j的地方獲取Log實例。

 

privatestatic Logger log = Logger.getLogger("MyCLASS.class");
4)使用Logger對象的debug,info,fatal...方法。

 

log.debug("it is the debug info");
4.Log4j使用示例
Test.java

 

import org.apache.log4j.Logger;
publicclass Test {
static Logger log= Logger.getLogger(Test.class);
publicvoid log(){
log.debug("Debug info.");
log.info("Info info");
log.warn("Warn info");
log.error("Error info");
log.fatal("Fatal info");
    }
publicstaticvoid main(String[] args) {
       Test test = new Test();
       test.log();
    }
}
Log4j.properties(具體配置屬性定義見《Log4j配置說明》)

 

log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
結果
INFO [main] (Test.java:16) - Info info
WARN [main] (Test.java:17) - Warn info
ERROR [main] (Test.java:18) - Error info
FATAL [main] (Test.java:19) - Fatal info
分析:
Test.java
“Logger.getLogger(Test.class);”這裏的“Test.class”事實上傳進去的是Test這個類的完整路徑(包名+類名),“test.Test”。這樣如果存在“test”這個Log那麼Test這個Log就繼承它,否則就繼承rootLogger。
Log4j.properties
第一行,配置log4j.rootLogger。應爲它是根,必須配置,否則別的Log無法繼承。其他的Log可以配置也可以不配置。等號後面的第一個參數表示日誌級別,可以填五個級別中的一種(Log4j默認把日誌信息分爲五個等級debug < info < warn < error < fatal),後面的參數都是讓Log知道輸出到哪裏,如果你想讓日誌輸出到兩個地方就加兩個輸出參數,比如:

 

log4j.rootLogger=info, stdout
這裏的info表示,該Log的日誌級別爲info,所有級別小於info的日誌都不會被記錄。比如使用這個配置文件的話,我剛開始舉的那個類中:

 

log.debug("Debug info.");
這句話是不起作用的,因爲debug的級別小於info。這樣就很容易控制什麼信息在調試的時候要顯示,什麼信息在發佈的時候要去掉。這些都不用改代碼。
      配置stdout,這個名字是隨便取的,你可以叫它A:

 

log4j.appender.A=org.apache.log4j.ConsoleAppender
那麼上面的rootLogger的參數stdout也要改成A,其他用到的地方當然也要改。這裏的關鍵不是名字,而是appender類型,比如這裏的“ConsoleAppender”,指輸出到Console。後面兩行都是設置日誌格式的。
5.Apache Log介紹集
6.參考資料
[1] Log4j官方手冊
[2] Log4j最簡入門

 

發佈了32 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章