java中Log4J的使用筆記


使用Log4J,程序員可以控制日志信息輸送的目的地,包括控制台,文件,GUI組件和NT事件記錄器,也可以控制每一條日志的輸出格式,或通過定義每一條日志信息的級別,更加細致地控制日志的生成過程。

Log4j的組成:
Log4j由三個重要的組成構成:日志記錄器(Loggers),輸出端(Appenders)和日志格式化器(Layout)。
Logger:控制要啟用或禁用哪些日志記錄語句,並對日志信息進行級別限制:Appenders指定了日志將打印到控制台還是文件中;而Layout則控制日志信息的顯示格式。

Log4j的組成:
Log4j由三個重要的組成構成:日志記錄器(Loggers),輸出端(Appenders)和日志格式化器(Layout)。
Logger:控制要啟用或禁用哪些日志記錄語句,並對日志信息進行級別限制:Appenders指定了日志將打印到控制台還是文件中;而Layout則控制日志信息的顯示格式。

A).Logger對象的獲得或創建
Logger被指定為實體,由一個String類的名字識別。Logger的名字是大小寫敏感的,且名字之間具有繼承關系,子名用父名作為前綴,用點“.”分隔,例如x.y是x.y.z的父親。
root Logger(根Logger)是所有Logger的祖先,它有如下屬性:
1.它總是存在的。
2.它不可以通過名字獲得。
root Logger可以通過以下語句獲得:

public static Logger Logger.getRootLogger();

 

或:

public static Logger Logger.getLogger(Class clazz)

 

其中調用Logger.getLogger(Class clazz)是目前ogger對象最理想的方法。

B)日志級別
每個Logger都被了一個日志級別(log level),用來控制日志信息的輸出。日志級別從高到低分為:
A:off         最高等級,用於關閉所有日志記錄。
B:fatal       指出每個嚴重的錯誤事件將會導致應用程序的退出。
C:error      指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
D:warm     表明會出現潛在的錯誤情形。
E:info         一般和在粗粒度級別上,強調應用程序的運行全程。
F:debug     一般用於細粒度級別上,對調試應用程序非常有幫助。
G:all           最低等級,用於打開所有日志記錄。

上面這些級別是定義在org.apache.log4j.Level類中。Log4j只建議使用4個級別,優先級從高到低分別是error,warn,info和debug。通過使用日志級別,可以控制應用程序中相應級別日志信息的輸出。例如,如果使用b了info級別,則應用程序中所有低於info級別的日志信息(如debug)將不會被打印出來。

package log4j;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class Log4jTest {

    public static void main(String[] args) {
        
        Logger logger = Logger.getLogger(Log4jTest.class);
        
        //使用默認的配置信息,不需要寫log4j.properties
        BasicConfigurator.configure();
        //設置日志輸出級別為info,這將覆蓋配置文件中設置的級別
        logger.setLevel(Level.INFO);
        //下面的消息將被輸出
        logger.info("this is an info");
        logger.warn("this is a warn");
        logger.error("this is an error");
        logger.fatal("this is a fatal");

    }

}

C)輸出端Appender
Appender用來指定日志信息輸出到哪個地方,可以同時指定多個輸出目的地。Log4j允許將信息輸出到許多不同的輸出設備中,一個log信息輸出目的地就叫做一個Appender。
每個Logger都可以擁有一個或多個Appender,每個Appender表示一個日志的輸出目的地。可以使用Logger.addAppender(Appender app)為Logger增加一個Appender,也可以使用Logger.removeAppender(Appender app)為Logger刪除一個Appender。
以下為Log4j幾種常用的輸出目的地。
a:org.apache.log4j.ConsoleAppender:將日志信息輸出到控制台。
b:org.apache.log4j.FileAppender:將日志信息輸出到一個文件。
c:org.apache.log4j.DailyRollingFileAppender:將日志信息輸出到一個日志文件,並且每天輸出到一個新的日志文件。
d:org.apache.log4j.RollingFileAppender:將日志信息輸出到一個日志文件,並且指定文件的尺寸,當文件大小達到指定尺寸時,會自動把文件改名,同時產生一個新的文件。
e:org.apache.log4j.WriteAppender:將日志信息以流格式發送到任意指定地方。
f::org.apache.log4j.jdbc.JDBCAppender:通過JDBC把日志信息輸出到數據庫中。

日志格式化器Layout
有三種:
HTMLLayout:格式化日志輸出為HTML表格形式:如下圖所示:

SimpleLayout:以一種非常簡單的方式格式化日志輸出,它打印三項內容:級別-信息。如:INFO - info

PatternLayout::根據指定的轉換模式格式化日志輸出,或者如果沒有指定任何轉換模式,就使用默認的轉化模式格式。
下面的代碼實現了SimpleLayout和FileAppender的程序。

public static void main(String[] args) {
        
        Logger logger = Logger.getLogger(Log4jTest.class);        
        SimpleLayout layout = new SimpleLayout();
        //HTMLLayout  layout = new HTMLLayout();
        FileAppender appender = null;
        try
        {
            //把輸出端配置到out.txt
            appender = new FileAppender(layout,"out.txt",false);
        }catch(Exception e)
        {            
        }
        logger.addAppender(appender);//添加輸出端
        logger.setLevel((Level)Level.DEBUG);//覆蓋配置文件中的級別
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.fatal("fatal");
    }

Log4j的配置
配置Log4j環境就是指配置root Logger,包括把Logger為哪個級別,為它增加哪些Appender,以及為這些Appender設置Layout等等。因為所有其他的Logger都是root Logger的后代,所以它們都繼承了root Logger的性質。這些可以通過設置系統屬性的方法來隱式地完成,也可以在程序中調用XXXConfigurator.configure()方法來顯式地完成。有以下幾種方式來配置Log4j。
A:配置放在文件里,通過環境變量傳遞文件名等信息,利用Log4j默認的初始化過程解析並配置。
B:配置放在文件里,通過應用服務器配置傳遞文件甸等信息,利用一個特定的Servlet來完成配置。
C:在程序中調用BasicConfigurator.configure()方法。
D:配置放在文件里,通過命令行PropertyConfigurator.configure(args[])解析log4j.properties文件並配置Log4j。
下面對BasicConfigurator.configure()方法和PropertyConfigurator.config()方法分別進行介紹。
BasicConfigurator.configure()方法:
它使用簡單的方法配置Log4j環境。這個方法完成的任務是:
1:用默認的方式創建PatternLayout對象p:

  PatternLayout p = new PatternLayout("%-4r[%t]%-5p%c%x-%m%n");

2:用p創建ConsoleAppender對象a,目標是System.out,標准輸出設備:

 ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT);

3:為root Logger增加一個ConsoleAppender p;

 rootLogger.addAppender(a);

4:把rootLogger的log level設置為DUBUG級別;

 

rootLogger.setLevel(Level.DEBUG);

PropertyConfigurator.configure()方法:

當使用以下語句生成Logger對象時:

 static Logger logger = Logger.getLogger(mycalss.class);

如果沒有調用BasicConfigurator.configure(),PropertyConfigurator.configure()或DOMConfigurator.configure()方法,Log4j會自動加載CLASSPATH下名為log4j.properties的配置文件。如果把此配置文件改為其他名字,例如my.properties,程序雖然仍能運行,但會報出不能正確初始化Log4j系統的提示。這時可以在程序中加上:

PropertyConfigurator.configure("classes/my.properties");

問題即可解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM