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

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

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

    隨筆-314  評(píng)論-209  文章-0  trackbacks-0
    Log4j由三個(gè)重要的組件構(gòu)成:日志信息的優(yōu)先級(jí),日志信息的輸出目的地,日志信息的輸出格式。日志信息的優(yōu)先級(jí)從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺(tái)還是文件中;而輸出格式則控制了日志信息的顯示內(nèi)容。

      一、定義配置文件

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

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

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

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

      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(控制臺(tái)),
      org.apache.log4j.FileAppender(文件),
      org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件),
      org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件),
      org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

      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(包含日志信息的級(jí)別和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)

    Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
    %m 輸出代碼中指定的消息
    %n? 輸出一個(gè)回車換行符,Windows平臺(tái)為“\r\n”,Unix平臺(tái)為“\n”?
    %p? 輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
    %r?? 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
    %c? 輸出所屬的類目,通常就是所在類的全名
    %t?? 輸出產(chǎn)生該日志事件的線程名
    %d? 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,
    ??????? 比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
    %l?? 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。
    ??????? 舉例:Testlog4.main(TestLog4.java:10)
    %F? 類目名
    %L? 代碼中的行數(shù)

      二、在代碼中使用Log4j

      1.得到記錄器

      使用Log4j,第一步就是獲取日志記錄器,這個(gè)記錄器將負(fù)責(zé)控制日志信息。其語法為:

      public static Logger getLogger( String name)

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

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

      2.讀取配置文件

      當(dāng)獲得了日志記錄器之后,第二步將配置Log4j環(huán)境,其語法為:

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

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

      當(dāng)上兩個(gè)必要步驟執(zhí)行完畢,您就可以輕松地使用不同優(yōu)先級(jí)別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:

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


    介紹
    命令行參數(shù)解析、應(yīng)用程序配置和日志記錄,作為一個(gè)應(yīng)用程序的骨架,隨處可見。因此,Apache軟件組織開發(fā)出了一套通用的類庫,用來幫助軟件開發(fā)人員完成這些“骨架”的建立。其中:
    &#8226;Commons CLI用于命令行解析
    &#8226;Commons Configuration用于讀取properties格式或者XML格式的配置信息
    &#8226;Commons Logging和Log4J用來提供日志支持。
    這些通用的類庫都在http://jakarta.apache.org/commons/index.html網(wǎng)址上提供下載

    Log4J是一個(gè)高度可配置的Logging框架,提供了結(jié)構(gòu)化,多種目標(biāo)和格式支持。

    &#8226;配置Log4J
    問題:
    Log4J支持Properties和XML兩種格式的配置文件。
    解決方案:
    定義log4j.properties配置文件

    # 所有Log信息輸出到標(biāo)準(zhǔn)輸出(System.out)和在下面指定的一個(gè)文件
    # WARN是默認(rèn)的logging級(jí)別
    log4j.rootCategory = WARN, STDOUT, FILE

    # 應(yīng)用程序的logging級(jí)別是DEBUG
    log4j.logger.com.discursive = DEBUG

    # 配置標(biāo)準(zhǔn)輸出Appender
    log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout = org.apache.log4j.PatternLayout
    log4j.appender.STDOUT.layout.ConversionPattern = %5p (%F:%L) %m%n

    # 配置輸出文件Appender
    log4j.appender.FILE = org.apache.log4j.RollingFileAppender
    log4j.appender.FILE.File = output.log
    log4j.appender.FILE.MaxFileSize = 2000KB
    log4j.appender.FILE.MaxBackupIndex = 5
    log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern = %d %-5p %c - %m%n



    PropertyConfigurator.configure(getClass()
    ??.getResource("/resources/log4j.properties"));

    Logger logger = Logger.getLogger("com.discursive.SomeApp");
    logger.info("This is a info message");
    logger.error("This is a error message");


    使用BasicConfigurator類來加載log4j.properties配置。使用Logger.getLogger獲得一個(gè)logger實(shí)例。
    配置文件中的rootCategory指定將log輸出到控制臺(tái)和output.log文件。文件Appender使用了RollingFileAppender,當(dāng)文件大小達(dá)到最大文件大小(MaxFileSize)2000KB時(shí),RollingFileAppender會(huì)備份原log文件,并再創(chuàng)建一個(gè)新的log文件。
    配置文件指定默認(rèn)的logging級(jí)別是DEBUG(log4j.logger.com.discursive = DEBUG)。所以,所有級(jí)別低于DEBUG的log信息都不會(huì)被輸出。Log4J按重要度定義了五個(gè)log級(jí)別,分別是:DEBUG, INFO, WARN, ERROR, 和FATAL。
    其他:
    Log4J還可以使用XML格式的配置文件,使用DOMConfigurator讀取。
    Log4J使用Appender和Layout來定制log輸出。Appender指定輸出到何處,Layout指定如何輸出(輸出的格式)。
    Log4J內(nèi)置的Appender有:
    &#8226;SMTPAppender
    &#8226;RollingFileAppender
    &#8226;SocketAppender
    &#8226;SyslogAppender
    &#8226;NTEventLogAppender
    Log4J支持的Layout有
    &#8226;XMLLayout
    &#8226;PatternLayout
    &#8226;HTMLLayout
    &#8226;DateLayout.


    附1
    # 所有Log信息輸出到標(biāo)準(zhǔn)輸出(System.out)和在下面指定的一個(gè)文件
    # WARN是默認(rèn)的logging級(jí)別
    log4j.rootCategory = INFO, STDOUT
    #log4j.rootCategory = INFO, STDOUT, FILE

    # 配置標(biāo)準(zhǔn)輸出Appender
    log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout = org.apache.log4j.PatternLayout
    log4j.appender.STDOUT.layout.ConversionPattern = %d{ABSOLUTE} %-5p [%c:%L] %m%n

    # 配置輸出文件Appender
    log4j.appender.FILE = org.apache.log4j.RollingFileAppender
    log4j.appender.FILE.File = output.log
    log4j.appender.FILE.MaxFileSize = 2000KB
    log4j.appender.FILE.MaxBackupIndex = 5
    log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern = %d %-5p [%c:%L] %m%n

    # 應(yīng)用程序的logging級(jí)別是DEBUG
    log4j.logger.com.xzc = DEBUG


    附2
    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - <%m>%n

    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    ### set log levels - for more verbose logging change 'info' to 'debug' ###

    log4j.rootLogger=warn, stdout

    log4j.logger.net.sf.hibernate=warn

    ### log just the SQL
    #log4j.logger.net.sf.hibernate.SQL=debug

    ### log JDBC bind parameters ###
    log4j.logger.net.sf.hibernate.type=info

    ### log schema export/update ###
    log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

    ### log cache activity ###
    #log4j.logger.net.sf.hibernate.cache=debug

    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace

    附3

    log4j.rootLogger=debug, stdout, R
    
    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
    
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=example.log
    
    log4j.appender.R.MaxFileSize=100KB
    # Keep one backup file
    log4j.appender.R.MaxBackupIndex=1
    
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n





    附4
    # Log4j由三個(gè)重要的組件構(gòu)成:日志信息的優(yōu)先級(jí),日志信息的輸出目的地,日志信息的輸出格式
    # 1.配置根Logger,其語法為:
    #  log4j.rootLogger = [ level ] , appenderName, 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(控制臺(tái)),
    # org.apache.log4j.FileAppender(文件),
    # org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件),
    # org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件),
    # org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
    # 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(包含日志信息的級(jí)別和信息字符串),
    # org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
    # Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
    # %m? 輸出代碼中指定的消息
    # %n? 輸出一個(gè)回車換行符,Windows平臺(tái)為“\r\n”,Unix平臺(tái)為“\n”
    # %p? 輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
    # %r? 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
    # %c? 輸出所屬的類目,通常就是所在類的全名
    # %t? 輸出產(chǎn)生該日志事件的線程名
    # %d? 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,
    #???? 比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
    # %l? 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。
    #???? 舉例:Testlog4.main(TestLog4.java:10)
    # %F? 類目名
    # %L? 代碼中的行數(shù)
    # 所有Log信息輸出到標(biāo)準(zhǔn)輸出(System.out)和在下面指定的一個(gè)文件 
    # 日志信息的優(yōu)先級(jí)從從高到低有ERROR、WARN、INFO、DEBUG
    # WARN是默認(rèn)的logging級(jí)別
    log4j.rootCategory = INFO, STDOUT
    #log4j.rootCategory = INFO, STDOUT, FILE
    #log4j.rootCategory = INFO, STD
    ?
    # 配置標(biāo)準(zhǔn)輸出Appender
    log4j.appender.STDOUT = org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout = org.apache.log4j.PatternLayout
    #log4j.appender.STDOUT.layout.ConversionPattern = %d{ABSOLUTE} %-5p [%c:%t:%L] %m%n
    log4j.appender.STDOUT.layout.ConversionPattern = %d{ABSOLUTE} %-5p [ %l ] %m%n
    # 配置輸出文件Appender
    log4j.appender.FILE = org.apache.log4j.RollingFileAppender
    log4j.appender.FILE.File = output.log
    log4j.appender.FILE.MaxFileSize = 2000KB
    log4j.appender.FILE.MaxBackupIndex = 5
    log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
    log4j.appender.FILE.layout.ConversionPattern = %d %-5p [%c:%L] %m%n
    # 配置默認(rèn)輸出layout
    log4j.appender.STD = org.apache.log4j.ConsoleAppender
    log4j.appender.STD.layout = org.apache.log4j.TTCCLayout
    # 應(yīng)用程序的logging級(jí)別是DEBUG
    log4j.logger.com.xzc = DEBUG




    posted on 2006-09-04 00:42 xzc 閱讀(8328) 評(píng)論(4)  編輯  收藏 所屬分類: Log4j

    評(píng)論:
    # re: Log4j基本使用方法 2007-07-04 16:23 | xzc
    1. 把重要的業(yè)務(wù)日志異步批量寫入數(shù)據(jù)庫
    配置文件示例:

    log4j.logger.business=INFO,db
    log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.db.BufferSize=10
    log4j.appender.db.URL=jdbc:hsqldb:res:/hsqldb/bookstore
    log4j.appender.db.driver=org.hsqldb.jdbcDriver
    log4j.appender.db.user=sa
    log4j.appender.db.password=
    log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')
    log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j提供了簡單靈活且不影響性能的機(jī)制, 將重要業(yè)務(wù)日志寫入數(shù)據(jù)庫,方便日后的查詢:

    1. 建立一個(gè)任意命名的日志記錄表,在log4j.properties里設(shè)置連接參數(shù),根據(jù)剛才建的表名列名,編寫插入的語句。

    2. BufferSize=10 這樣的參數(shù)可以讓日志異步批量寫入,不會(huì)影響系統(tǒng)性能。

    3. 業(yè)務(wù)日志log最好不要用原來的package結(jié)構(gòu),而是在項(xiàng)目里協(xié)調(diào)一個(gè)獨(dú)立的名字,如business。

    Log buzzLog = LogFactory.getLog("business"); 4. 以上功能的演示代碼在bookstore example 的OrderManager.java,測試代碼在bookstore example的DBLogTest.java。

      回復(fù)  更多評(píng)論
      
    # re: Log4j基本使用方法[未登錄] 2008-05-17 17:26 | xzc
    DailyRollingFileAppender的使用
    DailyRollingFileAppender是日志記錄軟件包Log4J中的一個(gè)Appender,它能夠按一定的頻度滾動(dòng)日志記錄文件。

    如果您不熟悉Log4J,那我們建議您閱讀一下 使用Log4j進(jìn)行日志記錄。

    我們可以按下面的方式配置DailyRollingFileAppender:

    log4j.rootCategory=INFO,file
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.DatePattern='.'yyyy-MM-dd
    log4j.appender.file.File=run.log
    log4j.appender.file.Append=true
    log4j.appender.file.Threshold=INFO
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%c %x - %m%n
    在DailyRollingFileAppender中可以指定monthly(每月)、weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小時(shí))和minutely(每分鐘)六個(gè)頻度,這是通過為DatePattern選項(xiàng)賦予不同的值來完成的。DatePattern選項(xiàng)的有效值為:

    '.'yyyy-MM,對(duì)應(yīng)monthly(每月)
    '.'yyyy-ww,對(duì)應(yīng)weekly(每周)
    '.'yyyy-MM-dd,對(duì)應(yīng)daily(每天)
    '.'yyyy-MM-dd-a,對(duì)應(yīng)half-daily(每半天)
    '.'yyyy-MM-dd-HH,對(duì)應(yīng)hourly(每小時(shí))
    '.'yyyy-MM-dd-HH-mm,對(duì)應(yīng)minutely(每分鐘)
    DatePattern中不用處理的文字要放到單引號(hào)(')中,如上面的(.)。如果您對(duì)此有疑問可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個(gè)類來處理DatePattern。

    DatePattern格式化之后的文本作為文件名字的后綴。DailyRollingFileAppender不支持格式化之后的文本作為文件名字的前綴。

    DailyRollingFileAppender在每一個(gè)日志事件(LoggingEvent)附加(append)之前檢查是否需要附加。也就是說如果在一個(gè)滾動(dòng)區(qū)間中沒有任何日志記錄,那么這個(gè)區(qū)間的日志記錄文件就不會(huì)形成。

    查閱DailyRollingFileAppender的JavaDoc文檔。

      回復(fù)  更多評(píng)論
      
    # re: Log4j基本使用方法[未登錄] 2008-05-17 17:27 | xzc
    # re: Log4j基本使用方法[未登錄] 2008-06-13 19:59 | xzc
    輸出到文件 RollingFileAppender的擴(kuò)展,可以提供一種日志的備份功能。
    log4j.appender.R=org.apache.log4j.RollingFileAppender


    日志文件的名稱
    log4j.appender.R.File=log4j.log
    日志文件的大小
    log4j.appender.R.MaxFileSize=100KB
    保存一個(gè)備份文件
    log4j.appender.R.MaxBackupIndex=1

    log4j.appender.R.layout=org.apache.log4j.TTCCLayout

    在文件后面繼續(xù)寫

    log4j.appender.ROLLING_FILE.Append=true

    設(shè)置配置文件的編碼

    log4j.appender.ROLLING_FILE.encoding=UTF-8

      回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 成年女人毛片免费视频| 免费播放一区二区三区| 亚洲电影日韩精品 | 亚洲综合自拍成人| 怡红院免费全部视频在线视频 | 亚洲精品456播放| 免费人妻精品一区二区三区| 日本不卡在线观看免费v| 国产人成亚洲第一网站在线播放| 三年片在线观看免费大全| 亚洲av无码不卡久久| 亚洲AV无码国产精品永久一区| 大学生一级特黄的免费大片视频 | 一级毛片免费观看不卡的| 亚洲处破女AV日韩精品| 国产99在线|亚洲| 好大好硬好爽免费视频| 国产亚洲精品成人AA片| 日韩免费一区二区三区| 一级日本高清视频免费观看 | 成全视频高清免费观看电视剧| 久久亚洲国产午夜精品理论片| 国产一精品一AV一免费| 亚洲黄色在线观看视频| 毛片免费观看的视频在线| 亚洲AV香蕉一区区二区三区| 亚洲精品无码成人片在线观看| 国产在线播放线91免费| 成人黄18免费视频| 男人免费视频一区二区在线观看| 中文字幕亚洲无线码| 99久热只有精品视频免费看| 亚洲人片在线观看天堂无码 | 亚洲中文字幕无码一区 | 啦啦啦www免费视频| 无人视频免费观看免费视频| 亚洲国产综合无码一区| 18以下岁毛片在免费播放| 亚洲伊人久久大香线蕉AV| 国产亚洲自拍一区| 中文字幕无码免费久久99|