<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    Log4j基本使用方法

    作者:佚名 ????來自:未知

      Log4j由三個重要的組件構成:日志信息的優先級,日志信息的輸出目的地,日志信息的輸出格式。日志信息的優先級從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;而輸出格式則控制了日志信息的顯示內容。

      一、定義配置文件

      其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環境。但是,使用配置文件將使您的應用程序更加靈活。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。下面我們介紹使用Java特性文件做為配置文件的方法:

      1.配置根Logger,其語法為:

      log4j.rootLogger = [ level ] , appenderName, appenderName, …

      其中,level 是日志記錄的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。 appenderName就是指定日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。

      2.配置日志信息輸出目的地Appender,其語法為:

      log4j.appender.appenderName = fully.qualified.name.of.appender.class
      log4j.appender.appenderName.option1 = value1
      …
      log4j.appender.appenderName.option = valueN

      其中,Log4j提供的appender有以下幾種:
      org.apache.log4j.ConsoleAppender(控制臺),
      org.apache.log4j.FileAppender(文件),
      org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
      org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)

      3.配置日志信息的格式(布局),其語法為:

      log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
      log4j.appender.appenderName.layout.option1 = value1
      …
      log4j.appender.appenderName.layout.option = valueN

      其中,Log4j提供的layout有以下幾種:
      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
      org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)

      Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數如下: %m 輸出代碼中指定的消息

      %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
      %r 輸出自應用啟動到輸出該log信息耗費的毫秒數
      %c 輸出所屬的類目,通常就是所在類的全名
      %t 輸出產生該日志事件的線程名
      %n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
      %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
      %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

      二、在代碼中使用Log4j

      1.得到記錄器

      使用Log4j,第一步就是獲取日志記錄器,這個記錄器將負責控制日志信息。其語法為:

      public static Logger getLogger( String name)

      通過指定的名字獲得記錄器,如果必要的話,則為這個名字創建一個新的記錄器。Name一般取本類的名字,比如:

      static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

      2.讀取配置文件

      當獲得了日志記錄器之后,第二步將配置Log4j環境,其語法為:

      BasicConfigurator.configure (): 自動快速地使用缺省Log4j環境。
      PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
      DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。

      3.插入記錄信息(格式化日志信息)

      當上兩個必要步驟執行完畢,您就可以輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:

      Logger.debug ( Object message ) ;
      Logger.info ( Object message ) ;
      Logger.warn ( Object message ) ;
      Logger.error ( Object message ) ;



    log4j使用示例
    2006-08-20 13:34
    log4j使用示例
    --by blues(zhaochaohua@sina.com)
    PART 1 介紹
    log4j的好處在于:
    1.通過修改配置文件,就可以決定log信息輸出到何處(console,文件,...),是否輸出。
    這樣,在系統開發階段可以打印詳細的log信息以跟蹤系統運行情況,而在系統穩定后可以關閉log輸出,從而在能跟蹤系統運行情況的同時,又減少了垃圾代碼(System.out.println(...)等)。
    2.使用log4j,需要整個系統有一個統一的log機制,有利于系統的規劃。

    log4j的使用本身很簡單。但合理地規劃一個系統的統一log機制需要周全的考慮。

    其他關于log4j的信息參看log4j自帶的文檔。

    PART II 配置文件詳細解釋
    先看一個配置文件的例子:
    1.配置文件的例子
    log4j.rootLogger=DEBUG
    #將DAO層log記錄到DAOLog,allLog中
    log4j.logger.DAO=DEBUG,A2,A4
    #將邏輯層log記錄到BusinessLog,allLog中
    log4j.logger.Businesslog=DEBUG,A3,A4
    #A1--打印到屏幕上
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n
    #A2--打印到文件DAOLog中--專門為DAO層服務
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=DAOLog
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    #A3--打印到文件BusinessLog中--專門記錄邏輯處理層服務log信息
    log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A3.file=BusinessLog
    log4j.appender.A3.DatePattern='.'yyyy-MM-dd
    log4j.appender.A3.layout=org.apache.log4j.PatternLayout
    log4j.appender.A3.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    #A4--打印到文件alllog中--記錄所有log信息
    log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A4.file=alllog
    log4j.appender.A4.DatePattern='.'yyyy-MM-dd
    log4j.appender.A4.layout=org.apache.log4j.PatternLayout
    log4j.appender.A4.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


    2.Appender的使用
    一個Appender代表log信息要寫向的一個地方。log4j可使用的Appender有很多類型,這里只考慮3種:ConsoleAppender,FileAppender,DailyRollFileAppender
    2.1 ConsoleAppender
    如果使用ConsoleAppender,那么log信息將寫到Console。就是直接把信息打印到System.out上了。
    2.2 FileAppender
    使用FileAppender,那么log信息將寫到指定的文件中。這應該是比較經常使用到的情況。
    相應地,在配置文件中應該指定log輸出的文件名。如下配置指定了log文件名為demo.txt
    log4j.appender.A2.File=demo.txt
    注意將A2替換為具體配置中Appender的別名。
    2.3 DailyRollingAppender
    使用FileAppender可以將log信息輸出到文件中,但是如果文件太大了讀起來就不方便了。這時就可以使用DailyRollingAppender。DailyRollingAppender可以把Log信息輸出到按照日期來區分的文件中。如下配置文件就會每天產生一個log文件,每個log文件只記錄當天的log信息:

    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=demo
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%m%n


    3.Layout的配置
    Layout指定了log信息輸出的樣式。
    詳細信息請查看PatternLayout的javadoc。
    例子1:顯示日期和log信息
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %m%n
    打印的信息是:
    2002-11-12 11:49:42,866 SELECT * FROM Role WHERE 1=1 order by createDate desc

    例子2:顯示日期,log發生地方和log信息
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %l "#" %m%n
    2002-11-12 11:51:46,313 cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409) "#" SELECT * FROM Role WHERE 1=1 order by createDate desc


    例子3:顯示log級別,時間,調用方法,log信息
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
    log信息:
    DEBUG??2002-11-12 12:00:57,376 method:cn.net.unet.weboa.system.dao.RoleDAO.select(RoleDAO.java:409)
    SELECT * FROM Role WHERE 1=1 order by createDate desc


    PART 3 log4j的使用
    log4j使用步驟有3個:
    3.1.根據配置文件初始化log4j
    配置文件如PART 2所敘述。現在講的是如何在程序中配置log4j。
    log4j可以使用3中配置器來初始化:BasicConfigurator,DOMConfigurator,PropertyConfigurator
    這里用的是PropertyConfigurator。使用PropertyConfigurator適用于所有的系統。
    如下的語句
    PropertyConfigurator.configure("log4j.properties");
    就以log4j.properties為配置文件初始化好了log4j環境。
    注意一點:這個語句只需要在系統啟動的時候執行一次。例如:在unet webOA項目中可以這么用:
    在ActionServlet的init()方法中調用一次。
    public class ActionServlet extends HttpServlet{
    ...
    /**
    * Initialize global variables
    */
    public void init() throws ServletException {
    // 初始化Action資源
    try{
    initLog4j();
    ...
    }catch(IOException e){
    throw new ServletException("Load ActionRes is Error");
    }
    }
    ...
    protected void initLog4j(){
    PropertyConfigurator.configure("log4j.properties");
    }
    ...
    }//end class ActionServlet

    3.2 在需要使用log4j的地方獲取Logger實例
    如下是RoleDAO類中的使用例子:
    static Logger log = Logger.getLogger("DAO");
    注意這里使用"DAO"標識符,那么對應的在配置文件中對應的配置信息如下:

    #定義DAO Logger
    log4j.logger.DAO=DEBUG,A2
    #設置Appender A2的屬性
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=demo
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n

    public class RoleDAO extends BaseDBObject
    {
    ...
    static Logger log = Logger.getLogger("DAO");
    ...
    public BeanCollection selectAll() throws SQLException
    {
    StringBuffer sql = new StringBuffer(SQLBUF_LEN);
    sql.append("SELECT * FROM " + tableName + " order by roldId");
    //System.out.println(sql.toString());
    log.debug(sql);
    ...
    }
    ...
    }

    3.3 使用Logger對象的debug,info,fatal...方法
    log.debug("it is the debug info");

    附件1:log4j的一個bug
    當這樣使用時,DailyRollingFileAppender不能正確使用:
    public Class RoleDAO(){

    static Logger log = Logger.getLogger("DAO");

    //在每一次new RoleDAO對象的時候都執行一次configure()操作
    public RoleDAO(TransactionManager transMgr) throws SQLException
    {
    ...
    PropertyConfigurator.configure("log4j.properties");
    ...
    }

    public void select(){
    ...
    //使用log4j進行log記錄
    log.debug("...");
    ...
    }
    }
    Log4J采用類似C語言中的printf函數的打印格式格式化日志信息,打印參數見表1如下:


    %m 輸出代碼中指定的消息
    %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
    %r 輸出自應用啟動到輸出該log信息耗費的毫秒數
    %c 輸出所屬的類目,通常就是所在類的全名
    %t 輸出產生該日志事件的線程名
    %n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
    %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
    %l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

      

    基本應用


    Log4J的配置

    現在來看log4j.properties配置文件的意義。第一行指定了根Logger的級別是DEBUG,并將此指定輸出到A1。A1就是第二行定義的org.apache.log4j.ConsoleAppender,此行表示將A1輸出到控制臺。第三行規定了輸出到A1的格式為org.apache.log4j.PatternLayout。第四行規定了輸出到A1格式的轉換模式為org.javaresearch.log4j.TestLog4J。

    很多成熟的服務器類的軟件日志信息會輸出到控制臺,同時輸出到日志文件備查。使用Log4J可以在不改變任何代碼的情況下,僅通過修改配置文件就可以輕松地完成這項功能。相關配置文件如下:

    #### Use two appenders, one to log to console, another to log to a file
    log4j.rootCategory=debug, stdout, R

    # Print only messages of priority WARN or higher for your category
    log4j.category.your.category.name=WARN

    #### First appender writes to console
    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

    #### Second appender writes to a file
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=example.log

    # Control the maximum log file size
    log4j.appender.R.MaxFileSize=100KB
    # Archive log files (one backup file here)
    log4j.appender.R.MaxBackupIndex=1

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

    ?

    這個配置文件指定了兩個輸出源stdout和R。前者把日志信息輸出到控制臺,后者是一個輪轉日志文件。最大的文件是100KB,當一個日志文件達到最大尺寸時,Log4J會自動把example.log重命名為example.log.1,然后重建一個新的example.log文件,依次輪轉。

    在Web應用中使用

    在Web應用中,應該在哪兒對Log4J進行配置呢?首先要明確,Log4J必須在應用的其它代碼執行前完成初始化。因為Servlet是在Web服務器啟動時立即裝入的,所以,在Web應用中一般使用一個專門的Servlet來完成Log4J的配置,并保證在web.xml的配置中,這個Servlet位于其它Servlet之前。下面是一個例子,代碼如下:

    package org.javaresearch.log4j;
    import java.io.*;
    import javax.servlet.*;
    import org.apache.log4j.*;
    public class Log4JInit extends HttpServlet {
    public void init() throws ServletException {
    String prefix = getServletContext().getRealPath("/");
    String file = getServletConfig().getInitParameter("log4j-config-file");
    // 從Servlet參數讀取log4j的配置文件
    if (file != null) {
    PropertyConfigurator.configure(prefix + file);
    }
    }
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws
    IOException, ServletException {}
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws
    IOException, ServletException {}
    }

    ?

    <servlet>
    <servlet-name>log4jinit</servlet-name>
    <servlet-class>org.javaresearch. log4j.Log4JInit</servlet-class>
    <init-param>
    <param-name> log4j-config-file </param-name>
    <param-value>/properties/log4j.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>

    ?

    注意:上面的load-on-startup應設為1,以便在Web容器啟動時即裝入該Servlet。log4j.properties文件放在根的properties子目錄中,也可以把它放在其它目錄中。應該把.properties文件集中存放,這樣方便管理。
    posted on 2006-10-16 13:06 SIMONE 閱讀(257) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 99国产精品永久免费视频| 免费A级毛片无码A∨| 大学生一级特黄的免费大片视频 | 亚洲性日韩精品一区二区三区| 亚洲日韩看片无码电影| 成人免费无码大片a毛片软件| 亚洲色偷偷色噜噜狠狠99网| 国产精品无码免费播放| 亚洲日本va一区二区三区| 国产黄色片在线免费观看| 国产AV无码专区亚洲AV琪琪| 亚洲国产成人久久综合区| 中文字幕在线免费视频| 亚洲AV午夜福利精品一区二区| 午夜不卡久久精品无码免费| 2022年亚洲午夜一区二区福利| 色片在线免费观看| 亚洲av日韩精品久久久久久a| 免费一级毛片不卡在线播放| 成人网站免费大全日韩国产| 亚洲A∨无码一区二区三区| 黄色永久免费网站| 黄色网址免费在线| 亚洲国产成人久久综合一| 麻豆国产精品免费视频| 狠狠入ady亚洲精品| 在线精品亚洲一区二区小说| 亚洲美女免费视频| 久久人午夜亚洲精品无码区| 亚洲熟女少妇一区二区| 67194熟妇在线永久免费观看 | 亚洲综合无码精品一区二区三区 | 亚洲一区二区影视| 亚洲AV无码成H人在线观看| 久久99青青精品免费观看| 亚洲中文字幕乱码一区| 亚洲精品无码不卡在线播放HE| 永久免费AV无码国产网站| 国产精品午夜免费观看网站| 亚洲精品第一国产综合野| a级亚洲片精品久久久久久久|