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

            一、定義配置文件

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

            1.配置根Logger,其語(yǔ)法為:

            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。通過(guò)在這里定義的級(jí)別,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開(kāi)關(guān)。比如在這里定義了INFO級(jí)別,則應(yīng)用程序中所有DEBUG級(jí)別的日志信息將不被打印出來(lái)。 appenderName就是指定日志信息輸出到哪個(gè)地方。您可以同時(shí)指定多個(gè)輸出目的地。

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

            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.配置日志信息的格式(布局),其語(yǔ)法為:

            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í)間、線程、類(lèi)別等等信息)

          Log4J采用類(lèi)似C語(yǔ)言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
          %m 輸出代碼中指定的消息
          %n? 輸出一個(gè)回車(chē)換行符,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? 輸出所屬的類(lèi)目,通常就是所在類(lèi)的全名
          %t?? 輸出產(chǎn)生該日志事件的線程名
          %d? 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,
          ??????? 比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類(lèi)似:2002年10月18日 22:10:28,921
          %l?? 輸出日志事件的發(fā)生位置,包括類(lèi)目名、發(fā)生的線程,以及在代碼中的行數(shù)。
          ??????? 舉例:Testlog4.main(TestLog4.java:10)
          %F? 類(lèi)目名
          %L? 代碼中的行數(shù)

            二、在代碼中使用Log4j

            1.得到記錄器

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

            public static Logger getLogger( String name)

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

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

            2.讀取配置文件

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

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

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

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

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


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

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

          •配置Log4J
          問(wèn)題:
          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類(lèi)來(lái)加載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來(lái)定制log輸出。Appender指定輸出到何處,Layout指定如何輸出(輸出的格式)。
          Log4J內(nèi)置的Appender有:
          •SMTPAppender
          •RollingFileAppender
          •SocketAppender
          •SyslogAppender
          •NTEventLogAppender
          Log4J支持的Layout有
          •XMLLayout
          •PatternLayout
          •HTMLLayout
          •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,其語(yǔ)法為:
          #  log4j.rootLogger = [ level ] , appenderName, appenderName, …
          # 2.配置日志信息輸出目的地Appender,其語(yǔ)法為:
          #  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.配置日志信息的格式(布局),其語(yǔ)法為:
          #  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í)間、線程、類(lèi)別等等信息)
          # Log4J采用類(lèi)似C語(yǔ)言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
          # %m? 輸出代碼中指定的消息
          # %n? 輸出一個(gè)回車(chē)換行符,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? 輸出所屬的類(lèi)目,通常就是所在類(lèi)的全名
          # %t? 輸出產(chǎn)生該日志事件的線程名
          # %d? 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,
          #???? 比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類(lèi)似:2002年10月18日 22:10:28,921
          # %l? 輸出日志事件的發(fā)生位置,包括類(lèi)目名、發(fā)生的線程,以及在代碼中的行數(shù)。
          #???? 舉例:Testlog4.main(TestLog4.java:10)
          # %F? 類(lèi)目名
          # %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 閱讀(8321) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): Log4j

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

          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提供了簡(jiǎn)單靈活且不影響性能的機(jī)制, 將重要業(yè)務(wù)日志寫(xiě)入數(shù)據(jù)庫(kù),方便日后的查詢(xún):

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

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

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

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

            回復(fù)  更多評(píng)論
            
          # re: Log4j基本使用方法[未登錄](méi) 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è)頻度,這是通過(guò)為DatePattern選項(xiàng)賦予不同的值來(lái)完成的。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ì)此有疑問(wèn)可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個(gè)類(lèi)來(lái)處理DatePattern。

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

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

          查閱DailyRollingFileAppender的JavaDoc文檔。

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


          日志文件的名稱(chēng)
          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ù)寫(xiě)

          log4j.appender.ROLLING_FILE.Append=true

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

          log4j.appender.ROLLING_FILE.encoding=UTF-8

            回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 绥阳县| 盐边县| 乡城县| 威信县| 上虞市| 和田市| 梁平县| 英吉沙县| 利川市| 贺兰县| 青浦区| 慈溪市| 安溪县| 华蓥市| 桂平市| 义马市| 梅州市| 东兴市| 长泰县| 香河县| 康定县| 恩施市| 伊金霍洛旗| 金乡县| 承德县| 墨竹工卡县| 丰顺县| 汽车| 安阳市| 漠河县| 措勤县| 大庆市| 汤阴县| 岳普湖县| 泉州市| 临邑县| 郴州市| 丹寨县| 刚察县| 晋州市| 巴楚县|