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

            二、在代碼中使用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 ) ;


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

          Log4J是一個高度可配置的Logging框架,提供了結構化,多種目標和格式支持。

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

          # 所有Log信息輸出到標準輸出(System.out)和在下面指定的一個文件
          # WARN是默認的logging級別
          log4j.rootCategory = WARN, STDOUT, FILE

          # 應用程序的logging級別是DEBUG
          log4j.logger.com.discursive = DEBUG

          # 配置標準輸出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獲得一個logger實例。
          配置文件中的rootCategory指定將log輸出到控制臺和output.log文件。文件Appender使用了RollingFileAppender,當文件大小達到最大文件大小(MaxFileSize)2000KB時,RollingFileAppender會備份原log文件,并再創建一個新的log文件。
          配置文件指定默認的logging級別是DEBUG(log4j.logger.com.discursive = DEBUG)。所以,所有級別低于DEBUG的log信息都不會被輸出。Log4J按重要度定義了五個log級別,分別是:DEBUG, INFO, WARN, ERROR, 和FATAL。
          其他:
          Log4J還可以使用XML格式的配置文件,使用DOMConfigurator讀取。
          Log4J使用Appender和Layout來定制log輸出。Appender指定輸出到何處,Layout指定如何輸出(輸出的格式)。
          Log4J內置的Appender有:
          •SMTPAppender
          •RollingFileAppender
          •SocketAppender
          •SyslogAppender
          •NTEventLogAppender
          Log4J支持的Layout有
          •XMLLayout
          •PatternLayout
          •HTMLLayout
          •DateLayout.


          附1
          # 所有Log信息輸出到標準輸出(System.out)和在下面指定的一個文件
          # WARN是默認的logging級別
          log4j.rootCategory = INFO, STDOUT
          #log4j.rootCategory = INFO, STDOUT, FILE

          # 配置標準輸出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

          # 應用程序的logging級別是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由三個重要的組件構成:日志信息的優先級,日志信息的輸出目的地,日志信息的輸出格式
          # 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(控制臺),
          # 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? 輸出代碼中指定的消息
          # %n? 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
          # %p? 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
          # %r? 輸出自應用啟動到輸出該log信息耗費的毫秒數
          # %c? 輸出所屬的類目,通常就是所在類的全名
          # %t? 輸出產生該日志事件的線程名
          # %d? 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,
          #???? 比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
          # %l? 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
          #???? 舉例:Testlog4.main(TestLog4.java:10)
          # %F? 類目名
          # %L? 代碼中的行數
          # 所有Log信息輸出到標準輸出(System.out)和在下面指定的一個文件 
          # 日志信息的優先級從從高到低有ERROR、WARN、INFO、DEBUG
          # WARN是默認的logging級別
          log4j.rootCategory = INFO, STDOUT
          #log4j.rootCategory = INFO, STDOUT, FILE
          #log4j.rootCategory = INFO, STD
          ?
          # 配置標準輸出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
          # 配置默認輸出layout
          log4j.appender.STD = org.apache.log4j.ConsoleAppender
          log4j.appender.STD.layout = org.apache.log4j.TTCCLayout
          # 應用程序的logging級別是DEBUG
          log4j.logger.com.xzc = DEBUG




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

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

          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提供了簡單靈活且不影響性能的機制, 將重要業務日志寫入數據庫,方便日后的查詢:

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

          2. BufferSize=10 這樣的參數可以讓日志異步批量寫入,不會影響系統性能。

          3. 業務日志log最好不要用原來的package結構,而是在項目里協調一個獨立的名字,如business。

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

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

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

          我們可以按下面的方式配置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(每小時)和minutely(每分鐘)六個頻度,這是通過為DatePattern選項賦予不同的值來完成的。DatePattern選項的有效值為:

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

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

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

          查閱DailyRollingFileAppender的JavaDoc文檔。

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


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

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

          在文件后面繼續寫

          log4j.appender.ROLLING_FILE.Append=true

          設置配置文件的編碼

          log4j.appender.ROLLING_FILE.encoding=UTF-8

            回復  更多評論
            
          主站蜘蛛池模板: 吉木乃县| 崇文区| 洛川县| 宣恩县| 石屏县| 满城县| 阳新县| 广元市| 湖口县| 桂阳县| 峨眉山市| 林芝县| 原平市| 平舆县| 博爱县| 沙洋县| 克东县| 鲜城| 大姚县| 临邑县| 双鸭山市| 驻马店市| 东光县| 云安县| 扎囊县| 南郑县| 宝丰县| 青海省| 清涧县| 开化县| 聂荣县| 黎城县| 韶关市| 长白| 大庆市| 明溪县| 阳谷县| 日喀则市| 环江| 根河市| 雅安市|