Log4J使用完全手冊

Log4J使用完全手冊 1
2009年02月15日 14:04

Log4JApache的一個開放源代碼項目(http://logging.apache.org/log4j/docs/),它是一個日誌操作包。通過使用Log4J,可以指定日誌信息輸出的目的地,控制每一條日誌的輸出格式,定義日誌信息的級別。所有這些功能通過一個配置文件靈活進行配置。

一、LOG4J組成

    LOG4J主要由三大組件組成:
    . Logger: 
決定什麼日誌信息應該被輸出、什麼日誌信息應該被忽略;
    . Appender: 
指定日誌信息應該輸出到什麼地方這些地方可以是控制檯、文件、網絡設備;
    . Layout: 
指定日誌信息的輸出格式;

    一個Logger可以有多個Appender,也就是說日誌信息可以同時輸出到多個設備上,每個Appender對應
    
一種Layout(示例見下圖)

              ↗ Appender1 → Layout
     
     
    Logger
     
 
              ↘ Appender2 → Layout


二、Logger組件

    1. Logger組件提供的方法:

       Logger組件是LOG4J的核心組件,它代表了Log4J的日誌記錄器,它能夠對日誌信息進行分類篩選。它由org.apache.log4j.Logger類實現,提供瞭如下方法:

java 代碼

1. package org.apache.log4j;   

2.   

3. public class Logger {   

4.   

5.             // Creation & retrieval methods:   

6.             public static Logger getRootLogger();   

7.             public static Logger getLogger(String name);   

8.   

9.             // printing methods:   

10.            public void debug(Object message);   

11.            public void info(Object message);   

12.            public void warn(Object message);   

13.            public void error(Object message);   

14.            public void fatal(Object message);   

15.      

16.            // generic printing method:   

17.            public void log(Priority p, Object message);   

18.}   

    2. 在配置文件中配置Logger組件

       可在Log4J配置文件中配置自己的Logger組件,示例:

       log4j.logger.myLogger=WARN

       以上代碼定義了一個Logger組件,名稱爲myLogger,日誌級別爲WARN


    3. 
日誌級別種類:

       一共有五種,級別由高到低依次是:fatalerrorwarninfodebug。獲得Logger實例後,我們可調用以下方法之一輸出日誌信息:

       public void debug(Object message);   //輸出debug級別的日誌信息;
       public void info(Object message);   //
輸出info級別的日誌信息;
       public void warn(Object message);    //
輸出warn級別的日誌信息;
       public void error(Object message); //
輸出error級別的日誌信息;
       public void fatal(Object message); //
輸出fatal級別的日誌信息;
       public void log(Priority p, Object message);//
輸出參數Priority指定級別的日誌信息;

       以上方法只有當它的級別大於或等於Logger組件配置的日誌級別時才調用。以前面我們配置的myLogger爲例,它的日誌級別爲WARN, 那麼在程序中,它的warn()error()fatal()方法會被執行。對於log()方法,只有當它的參數Priority指定的日誌級別大於或等於WARN時,它纔會被執行。

    4. 爲什麼需要對日誌進行分級?
    
       
在寫程序的時候,爲了調試程序,我們會在很多出錯的地方輸出大量的日誌信息。當程序調試完,不需要這些信息時,將程序中這些輸出日誌信息代碼刪除嗎?這樣費時費力,對於大型程序幾乎不可行。通過對日誌分級,假如不想輸出WARN級別的日誌信息,則Logger組件的級別調高即可,省時省心。

    5. Logger組件的繼承性

       Log4J提供了一個root Logger,它是所有Logger組件的祖先”,它永遠存在,且不能通過名字檢索或引用,通過Logger.getRootLogger()方法取得它。配置root Logger代碼:

       log4j.rootLogger=INFO,console

       可在配置文件中方便地配置存在繼承關係的Logger組件,凡是在符號“.”後面的組件都會成爲在符號“.”前面的Logger組件的子類。例如:

       log4j.apache.myLogger=WARN
       log4j.apache.myLogger.mySonLogger=,file

       以上代碼中, mySonLoggermyLogger的子類Logger組件。Logger組件的繼承關係:
       . 
如果子類Logger組件沒有定義日誌級別,則將繼承父類的日誌級別;
       . 
如果子類Logger組件定義了日誌級別,就不會繼承父類的日誌級別
;
       . 
黙認情況下,子類Logger組件會繼承父類所有的Appender,把它們加入到自己的
Appener;
       . 
如果把子類Logger組件的additivity標誌設爲false,那麼它就不會繼承父類Appenderadditivity標誌 默認值爲false

       以上配置的三個Logger繼承關係示例如圖:
     
       root Logger: 
日誌級別=INFO appender清單=console
                            ↑
       myLogger: 
日誌級別=WARN appender清單
=null
                            ↑
       mySonLogger: 
日誌級別=null appender清單=file

       這三個Logger組件實際日誌級別和Appender如下表:

       Logger組件          日誌級別          Appender清單
       root Logger         INFO              console
       myLogger            WARN              console(
繼承)
       mySonLogger         WARN(
繼承)        fileconsole(繼承)

   
三、Appender組件

    Appender組件決定將日誌信息輸出到什麼地方。支持以下目的地:
    . 
控制檯(Console);
    . 
文件
(File);
    . GUI
組件
(GUI component);
    . 
套接口服務器
(Remote socket server);
    . NT
的事件記錄器
(NT Event Logger);
    . UNIX Syslog
守護進程(Remote UNIX Syslog daemon);

    一個Logger可同時對應多個Appender,示例:myLogger配置二個Appender: 一個file, 一個是console

    log4j.logger.myAppender=WARN,file,console

    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=log.txt

    log4j.apender.console=org.apache.log4j.ConsoleAppender

四、Layout組件

    Layout組件決定日誌輸出格式有以下幾種類型
    . org.apache.log4j.HTMLLayout(
HTML表格形式佈局);
    . org.apache.log4j.PatternLayout(
可以靈活地指定佈局模式
);
    . org.apache.log4j.SimpleLayout(
包含日誌信息的級別和信息字符串
);
    . org.apache.log4j.TTCCLayout(
包含日誌產生的時間、線程和類別等信息
);
    
    
爲名稱爲consoleAppender配置SimpleLayout代碼如下

    log4j.appender.console.layout=org.apache.log4j.SimpleLayout

    輸出日誌格式如下:

    WARN - This is a log message from the myLogger
    
    
爲名稱爲fileAppender配置PatternLayout,代碼如下:

    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%t %p - %m%n

    輸出日誌格式如下:

    THREAD-1 WARN - This is a log message from the myLogger

    PatternLayout讓開發者依照ConversionPattern定義輸出格式。ConversionPattern中一些指定日誌內容和格式的預定義符號說明如下:

    符號         描述
    %r           
自程序開始後消耗的毫秒數
    %t           
表示日誌記錄請求生成的線程
    %p           
表示日專語句的優先級
    %r           
與日誌請求相關的類別名稱
    %c           
日誌信息所在的類名
    %m%n         
表示日誌信息的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章