隨筆-72  評論-20  文章-0  trackbacks-1
          1.Logger
          通過Logger類的靜態(tài)方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通過靜態(tài)方法Logger.getLogger來實例化并獲取的。這個方法Logger.getLogger把所想要的logger的名字作為參數(shù)。 Logger類的一些其它基本方法在下面列出:
          package org.apache.log4j;
          public class Logger {
           
            // Creation and retrieval methods:
            public static Logger getRootLogger();
            public static Logger getLogger(String name);
           
            // printing methods:
            public void debug(Object message);
            public void info(Object message);
            public void warn(Object message);
            public void error(Object message);
            public void fatal(Object message);
           
            // generic printing method:
            public void log(Level l, Object message);
          }
           
           
          2. getLogger方法
          以一樣的參數(shù)名字調(diào)用getLogger方法,返回的reference總是指向完全相同的logger對象。例如,在這里:
          Logger x = Logger.getLogger("wombat");
          Logger y = Logger.getLogger("wombat");
          x和y指向完全相同的logger對象。
           
          3.Log4j使用流程
          1)根據(jù)配置文件初始化log4j
                 log4j可以使用3種配置器來初始化:
          BasicConfigurator,DOMConfigurator,PropertyConfigurator。
          這里用的是PropertyConfigurator。使用PropertyConfigurator適用于所有的系統(tǒng)。如下的語句。
          PropertyConfigurator.configure("log4j.properties");
          就以log4j.properties為配置文件初始化好了log4j環(huán)境。對于一般的java project 可以不使用上面的語句初始化log4j,log4j會自動在classpath下,找到配置文件并初始化。如果log4j不能自動初始化配置文件,那么就需要用上面的方法進行初始化。
                 注意:初始化配置文件,最好只在系統(tǒng)啟動的時候執(zhí)行一次,如果執(zhí)行多次,一是浪費資源,二就是對于老版本的log4j,使用DailyRollingFileAppender時,可能會出現(xiàn)問題。
           
          2)導(dǎo)入org.apache.log4j.Logger;及相關(guān)包。
           
          3)在需要使用log4j的地方獲取Log實例。
          static 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;
           
          public class Test {
              static Logger log= Logger.getLogger(Test.class);
              public void log(){
                 log.debug("Debug info.");
                 log.info("Info info");
                 log.warn("Warn info");
                 log.error("Error info");
                 log.fatal("Fatal info");
              }
              public static void 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
           
          結(jié)果
          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。應(yīng)為它是根,必須配置,否則別的Log無法繼承。其他的Log可以配置也可以不配置。等號后面的第一個參數(shù)表示日志級別,可以填五個級別中的一種(Log4j默認把日志信息分為五個等級debug < info < warn < error < fatal),后面的參數(shù)都是讓Log知道輸出到哪里,如果你想讓日志輸出到兩個地方就加兩個輸出參數(shù),比如:
          log4j.rootLogger=info, stdout
          這里的info表示,該Log的日志級別為info,所有級別小于info的日志都不會被記錄。比如使用這個配置文件的話,我剛開始舉的那個類中
          log.debug("Debug info.");
          這句話是不起作用的,因為debug的級別小于info。這樣就很容易控制什么信息在調(diào)試的時候要顯示,什么信息在發(fā)布的時候要去掉。這些都不用改代碼。
                配置stdout,這個名字是隨便取的,你可以叫它A:
          log4j.appender.A=org.apache.log4j.ConsoleAppender
          那么上面的rootLogger的參數(shù)stdout也要改成A,其他用到的地方當(dāng)然也要改。這里的關(guān)鍵不是名字,而是appender類型,比如這里的“ConsoleAppender”,指輸出到Console。后面兩行都是設(shè)置日志格式的。
           
          5.參考資料
          [1] Log4j官方手冊
          [2] Log4j最簡入門

          posted on 2007-08-19 05:15 前方的路 閱讀(2241) 評論(0)  編輯  收藏 所屬分類: Java技術(shù)
          主站蜘蛛池模板: 长春市| 隆子县| 贵港市| 嘉义县| 安远县| 绥德县| 夏河县| 包头市| 江源县| 获嘉县| 宿松县| 唐山市| 清徐县| 正安县| 礼泉县| 江津市| 吉林省| 岚皋县| 济阳县| 岳普湖县| 昭觉县| 曲周县| 阳东县| 闽清县| 简阳市| 仙游县| 偃师市| 南澳县| 剑川县| 新疆| 开化县| 祁东县| 庆阳市| 澳门| 儋州市| 南投市| 静乐县| 五原县| 清苑县| 依安县| 廊坊市|