log4j使用手冊(cè).doc_第1頁(yè)
log4j使用手冊(cè).doc_第2頁(yè)
log4j使用手冊(cè).doc_第3頁(yè)
log4j使用手冊(cè).doc_第4頁(yè)
log4j使用手冊(cè).doc_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

log4j使用手冊(cè)Log4J是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目(/log4j/docs/),它是一個(gè)日志操作包。通過(guò)使用Log4J,可以指定日志信息輸出的目的地,控制每一條日志的輸出格式,定義日志信息的級(jí)別。所有這些功能通過(guò)一個(gè)配置文件靈活進(jìn)行配置。 一、LOG4J組成 LOG4J主要由三大組件組成: . Logger: 決定什么日志信息應(yīng)該被輸出、什么日志信息應(yīng)該被忽略; . Appender: 指定日志信息應(yīng)該輸出到什么地方, 這些地方可以是控制臺(tái)、文件、網(wǎng)絡(luò)設(shè)備; . Layout: 指定日志信息的輸出格式; 一個(gè)Logger可以有多個(gè)Appender,也就是說(shuō)日志信息可以同時(shí)輸出到多個(gè)設(shè)備上,每個(gè)Appender對(duì)應(yīng) 一種Layout(示例見(jiàn)下圖)。 Appender1 Layout Logger Appender2 Layout二、Logger組件 1. Logger組件提供的方法: Logger組件是LOG4J的核心組件,它代表了Log4J的日志記錄器,它能夠?qū)θ罩拘畔⑦M(jìn)行分類篩選。它由org.apache.log4j.Logger類實(shí)現(xiàn),提供了如下方法: java 代碼1 package org.apache.log4j; 2 3 public class Logger 4 5 / Creation & retrieval methods: 6 public static Logger getRootLogger(); 7 public static Logger getLogger(String name); 8 9 / printing methods: 10 public void debug(Object message); 11 public void info(Object message); 12 public void warn(Object message); 13 public void error(Object message); 14 public void fatal(Object message); 15 16 / generic printing method: 17 public void log(Priority p, Object message); 18 2. 在配置文件中配置Logger組件 可在Log4J配置文件中配置自己的Logger組件,示例: log4j.logger.myLogger=WARN 以上代碼定義了一個(gè)Logger組件,名稱為myLogger,日志級(jí)別為WARN。 3. 日志級(jí)別種類: 一共有五種,級(jí)別由高到低依次是:fatal、error、warn、info、debug。獲得Logger實(shí)例后,我們可調(diào)用以下方法之一輸出日志信息: public void debug(Object message); /輸出debug級(jí)別的日志信息; public void info(Object message); /輸出info級(jí)別的日志信息; public void warn(Object message); /輸出warn級(jí)別的日志信息; public void error(Object message); /輸出error級(jí)別的日志信息; public void fatal(Object message); /輸出fatal級(jí)別的日志信息; public void log(Priority p, Object message);/輸出參數(shù)Priority指定級(jí)別的日志信息; 以上方法只有當(dāng)它的級(jí)別大于或等于Logger組件配置的日志級(jí)別時(shí)才調(diào)用。以前面我們配置的myLogger為例,它的日志級(jí)別為WARN, 那么在程序中,它的warn()、error()、fatal()方法會(huì)被執(zhí)行。對(duì)于log()方法,只有當(dāng)它的參數(shù)Priority指定的日志級(jí)別大于或等于WARN時(shí),它才會(huì)被執(zhí)行。 4. 為什么需要對(duì)日志進(jìn)行分級(jí)? 在寫程序的時(shí)候,為了調(diào)試程序,我們會(huì)在很多出錯(cuò)的地方輸出大量的日志信息。當(dāng)程序調(diào)試完,不需要這些信息時(shí),將程序中這些輸出日志信息代碼刪除嗎?這樣費(fèi)時(shí)費(fèi)力,對(duì)于大型程序幾乎不可行。通過(guò)對(duì)日志分級(jí),假如不想輸出WARN級(jí)別的日志信息,則Logger組件的級(jí)別調(diào)高即可,省時(shí)省心。 5. Logger組件的繼承性 Log4J提供了一個(gè)root Logger,它是所有Logger組件的“祖先”,它永遠(yuǎn)存在,且不能通過(guò)名字檢索或引用,通過(guò)Logger.getRootLogger()方法取得它。配置root Logger代碼: log4j.rootLogger=INFO,console 可在配置文件中方便地配置存在繼承關(guān)系的Logger組件,凡是在符號(hào)“.”后面的組件都會(huì)成為在符號(hào)“.”前面的Logger組件的子類。例如: log4j.apache.myLogger=WARN log4j.apache.myLogger.mySonLogger=,file 以上代碼中, mySonLogger是myLogger的子類Logger組件。Logger組件的繼承關(guān)系: . 如果子類Logger組件沒(méi)有定義日志級(jí)別,則將繼承父類的日志級(jí)別; . 如果子類Logger組件定義了日志級(jí)別,就不會(huì)繼承父類的日志級(jí)別; . 黙認(rèn)情況下,子類Logger組件會(huì)繼承父類所有的Appender,把它們加入到自己的Appener; . 如果把子類Logger組件的additivity標(biāo)志設(shè)為false,那么它就不會(huì)繼承父類Appender。additivity標(biāo)志 默認(rèn)值為false; 以上配置的三個(gè)Logger繼承關(guān)系示例如圖: root Logger: 日志級(jí)別=INFO appender清單=console myLogger: 日志級(jí)別=WARN appender清單=null mySonLogger: 日志級(jí)別=null appender清單=file 這三個(gè)Logger組件實(shí)際日志級(jí)別和Appender如下表: Logger組件 日志級(jí)別 Appender清單 root Logger INFO console myLogger WARN console(繼承) mySonLogger WARN(繼承) file,console(繼承) 三、Appender組件 Appender組件決定將日志信息輸出到什么地方。支持以下目的地: . 控制臺(tái)(Console); . 文件(File); . GUI組件(GUI component); . 套接口服務(wù)器(Remote socket server); . NT的事件記錄器(NT Event Logger); . UNIX Syslog守護(hù)進(jìn)程(Remote UNIX Syslog daemon); 一個(gè)Logger可同時(shí)對(duì)應(yīng)多個(gè)Appender,示例:myLogger配置二個(gè)Appender: 一個(gè)file, 一個(gè)是console: log4j.logger.myAppender=WARN,file,console log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=log.txt log4j.apender.console=org.apache.log4j.ConsoleAppender四、Layout組件 Layout組件決定日志輸出格式,有以下幾種類型: . org.apache.log4j.HTMLLayout(以HTML表格形式布局); . org.apache.log4j.PatternLayout(可以靈活地指定布局模式); . org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串); . org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程和類別等信息); 為名稱為console的Appender配置SimpleLayout,代碼如下: log4j.appender.console.layout=org.apache.log4j.SimpleLayout 輸出日志格式如下: WARN - This is a log message from the myLogger 為名稱為file的Appender配置PatternLayout,代碼如下: log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%t %p - %m%n 輸出日志格式如下: THREAD-1 WARN - This is a log message from the myLogger PatternLayout讓開(kāi)發(fā)者依照ConversionPattern定義輸出格式。ConversionPattern中一些指定日志內(nèi)容和格式的預(yù)定義符號(hào)說(shuō)明如下: 符號(hào) 描述 %r 自程序開(kāi)始后消耗的毫秒數(shù) %t 表示日志記錄請(qǐng)求生成的線程 %p 表示日專語(yǔ)句的優(yōu)先級(jí) %r 與日志請(qǐng)求相關(guān)的類別名稱 %c 日志信息所在的類名 %m%n 表示日志信息的內(nèi)容五、Log4J的基本用法 1. 定義配置文件 Log4J支持二種配置文件格式:XML和Java屬性文件(采用“鍵=值”形式)。以下為Java屬性文件 格式配置文件: . 配置Logger組件 配置root Logger語(yǔ)法為:log4j.rootLogger=priority,appenderName,appenderName,. 配置自定義Logger組件語(yǔ)法為:log4j.logger.loggerName=priority,appenderName,appenderName,. 其中:priority為日志級(jí)別,可選值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL; appenderName指定Appender組件,可指定多個(gè); . 配置Appender組件 配置日志信息輸出目的地Appender, 語(yǔ)法為: log4j.appender.appenderName=.of.appender.class log4j.appender.appenderName.option1=value1 . log4j.appender.appenderName.optionN=valueN Log4J提供的Appender有以下幾種: a. org.apache.log4j.ConsoleAppender(控制臺(tái)); b. org.apache.log4j.FileAppender(文件); c. org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件); d. org.apache.log4j.RollingFileAppender(文件大小到指定尺寸產(chǎn)生一個(gè)新的文件); e. org.apache.log4j.WriteAppender(將日志信息以流格式發(fā)送到任意指定地方); . 配置Layout組件 配置Layout組件語(yǔ)法為: log4j.appender.appenderName.layout=.of.appender.class log4j.appender.appenderName.layout.option1=value1 . log4j.appender.appenderName.layout.optionN=valueN 下面為一配置文件示例,文件名為perties: # LOGGERS # #configure root logger log4j.rootLogger=INFO,console #define a logger named myLogger log4j.logger.myLogger=WARN #define a second logger that is a child to myLogger log4j.logger.myLogger.mySonLogger=,file # APPENDERS # #define an appender named console, which is set to be a ConsoleAppender log4j.appender.console=org.apache.log4j.ConsoleAppender # define an appender named file, which is set to be a RollingFileAppender log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=log.txt # LAYOUTS # # assian a SimpleLayout to console appender log4j.appender.console.layout=org.apache.log4j.SimpleLayout # assian a PatternLayout to file appender log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%t%p-%m%n 2. 程序中使用Log4j . 獲得日志記錄器: 獲得rootLogger:Logger rootLogger=Logger.getRootLogger(); 獲得自定義Logger:Logger myLogger = Logger.getLogger(log4j.logger.myLogger); . 讀取日志記錄器,配置Log4J環(huán)境; a. BasicConfigurator.configure(): 自動(dòng)快速地使用默認(rèn)Log4J環(huán)境; b. Property.configurator.configure(String configFilename): 讀取使用Java屬性格式的配置文件并配置Log4J環(huán)境; c. DOMConfigurator.configure(String filename): 讀取XML形式的配置文件并配置LOG4J環(huán)境; . 輸出日志信息; 在程序代碼中需要生成日志的地方,調(diào)用Logger的各種輸出日志方法輸出不同級(jí)別的日志,例如: myLogger.debug(Thie is a log message from the + myLogger.getName(); 下面為一使用Log4J的程序,程序名為Test.java:java 代碼19 import org.apache.log4j.Logger; 20 import org.apache.log4j.PropertyConfigurator; 21 22 public class Test 23 24 public static void main(String args) 25 /Get an instance of the myLogger 26 Logger myLogger = Logger.getLogger(myLogger); 27 28 /Get an instance of the childLogger 29 Logger mySonLogger = Logger.getLogger(myLogger.mySonLogger); 30 /Load the proerties using the PropertyConfigurator 31 PropertyConfigurator.configure(perties); 32 33 /Log Messages using the Parent Logger 34 myLogger.debug(Thie is a log message from the + myLogger.getName(); 35 myL(Thie is a log message from the + myLogger.getName(); 36 myLogger.warn(Thie is a log message from the + myLogger.getName(); 37 myLogger.error(Thie is a log message from the + myLogger.getName(); 38 myLogger.fatal(Thie is a log message from the + myLogger.getName(); 39 40 mySonLogger.debug(Thie is a log message from the + mySonLogger.getName(); 41 mySonL(Thie is a log message from the + mySonLogger.getName(); 42 mySonLogger.warn(Thie is a log message from the + mySonLogger.getName(); 43 mySonLogger.error(Thie is a log message from the + mySonLogger.getName(); 44 mySonLogger.fatal(Thie is a log message from the + mySonLogger.getName(); 45 46 程序運(yùn)行結(jié)果為: WARN - Thie is a log message from the myLogger ERROR - Thie is a log message from the myLogger FATAL - Thie is a log message from the myLogger WARN - Thie is a log message from the myLogger.mySonLogger ERROR - Thie is a log message from the myLogger.mySonLogger FATAL - Thie is a log message from the myLogger.mySonLogger 另在Test.class所在的目錄下看到一個(gè)log.txt文件,內(nèi)容如下: WARN - Thie is a log message from the myLogger.mySonLogger ERROR - Thie is a log message from the myLogger.mySonLogger FATAL - Thie is a log message from the myLogger.mySonLogger 如將配置文件perties中語(yǔ)句 log4j.logger.myLogger.mySonLogger=,file 改為 log4j.logger.myLogger.mySonLogger=,file,console 再次運(yùn)行程序,結(jié)果如下: WARN - Thie is a log message from the myLogger ERROR - Thie is a log message from the myLogger FATAL - Thie is a log message from the myLogger WARN - Thie is a log message from the myLogger.mySonLogger WARN - Thie is a log message from the myLogger.mySonLogger ERROR - Thie is a log message from the myLogger.mySonLogger ERROR - Thie is a log message from the myLogger.mySonLogger FATAL - Thie is a log message from the myLogger.mySonLogger FATAL - Thie is a log message from the myLogger.mySonLogger mySonLogger的日志在控制臺(tái)上輸出了二次,這是因?yàn)閙ySonLogger繼承了父類console Appender, 本身又定義了一個(gè)console Appender, 因而有二個(gè)console Appender。六、在web應(yīng)用中使用Log4J 創(chuàng)建一個(gè)Servlet,在它初始化方法中讀取Log4J配置文件并配置Log4J環(huán)境,這個(gè)Servlet在Web應(yīng)用啟 動(dòng)時(shí)候被加載和初始化,然后就可在其它Web組件中獲取Logger對(duì)象并輸出日志。 1. 創(chuàng)建用于配置Log4J環(huán)境的Servletjava 代碼47 import javax.servlet.*; 48 import javax.servlet.http.*; 49 import java.io.*; 50 import java.util.*; 51 52 import org.apache.log4j.PropertyConfigurator; 53 54 public class Log4JServlet extends HttpServlet 55 public void init() throws ServletException 56 String path = getServletContext().getRealPath(/); 57 /getInitParameter(propfile)方法從web.xml文件中讀取Log4J配置文件的名字profile。 58 String propfile = path + getInitParameter(propfile); 59 PropertyConfigurat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論