天天看點

Apache Log4j使用執行個體

<b>1.Logger</b><b>類</b><b></b>

<b></b>

通過Logger類的靜态方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通過靜态方法Logger.getLogger來執行個體化并擷取的。這個方法Logger.getLogger把所想要的logger的名字作為參數。 Logger類的一些其它基本方法在下面列出:

<b>package</b> org.apache.log4j;

<b>public</b> <b>class</b> Logger {

  // Creation and retrieval methods:

  <b>public</b> <b>static</b> Logger getRootLogger();

  <b>public</b> <b>static</b> Logger getLogger(String name);

  // printing methods:

  <b>public</b> <b>void</b> debug(Object message);

  <b>public</b> <b>void</b> info(Object message);

  <b>public</b> <b>void</b> warn(Object message);

  <b>public</b> <b>void</b> error(Object message);

  <b>public</b> <b>void</b> fatal(Object message);

  // generic printing method:

  <b>public</b> <b>void</b> log(Level l, Object message);

}

<b>2. getLogger</b><b>方法</b><b></b>

以一樣的參數名字調用getLogger方法,傳回的reference總是指向完全相同的logger對象。例如,在這裡:

Logger x = Logger.getLogger("wombat");

Logger y = Logger.getLogger("wombat");

x和y指向完全相同的logger對象。

<b>3.Log4j</b><b>使用流程</b><b></b>

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執行個體。

<b>private</b> <b>static</b> Logger log = Logger.getLogger("MyCLASS.class");

4)使用Logger對象的debug,info,fatal...方法。

log.debug("it is the debug info");

<b>4.Log4j</b><b>使用示例</b><b></b>

Test.java

<b>import</b> org.apache.log4j.Logger;

<b>public</b> <b>class</b> Test {

    <b>static</b> Logger log= Logger.getLogger(Test.<b>class</b>);

    <b>public</b> <b>void</b> log(){

       log.debug("Debug info.");

       log.info("Info info");

       log.warn("Warn info");

       log.error("Error info");

       log.fatal("Fatal info");

    }

    <b>public</b> <b>static</b> <b>void</b> main(String[] args) {

       Test test = <b>new</b> 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

分析:

“Logger.getLogger(Test.class);”這裡的“Test.class”事實上傳進去的是Test這個類的完整路徑(包名+類名),“test.Test”。這樣如果存在“test”這個Log那麼Test這個Log就繼承它,否則就繼承rootLogger。

Log4j.properties

第一行,配置log4j.rootLogger。應為它是根,必須配置,否則别的Log無法繼承。其他的Log可以配置也可以不配置。等号後面的第一個參數表示日志級别,可以填五個級别中的一種(Log4j預設把日志資訊分為五個等級debug &lt; info &lt; warn &lt; error &lt; fatal),後面的參數都是讓Log知道輸出到哪裡,如果你想讓日志輸出到兩個地方就加兩個輸出參數,比如:

這裡的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。後面兩行都是設定日志格式的。

本文轉自zhangjunhd51CTO部落格,原文連結:http://blog.51cto.com/zhangjunhd/21211,如需轉載請自行聯系原作者