Log4J使用完全手冊_第1頁
Log4J使用完全手冊_第2頁
Log4J使用完全手冊_第3頁
Log4J使用完全手冊_第4頁
Log4J使用完全手冊_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

------------------------------------------------------------------------Log4J使用完全手冊Log4J使用完全手冊Log4J是Apache的一個開放源代碼項目(),它是一個日志操作包。通過使用Log4J,可以指定日志信息輸出的目的地,控制每一條日志的輸出格式,定義日志信息的級別。所有這些功能通過一個配置文件靈活進(jìn)行配置。一、LOG4J組成

LOG4J主要由三大組件組成:

.Logger:決定什么日志信息應(yīng)該被輸出、什么日志信息應(yīng)該被忽略;

.Appender:指定日志信息應(yīng)該輸出到什么地方,這些地方可以是控制臺、文件、網(wǎng)絡(luò)設(shè)備;

.Layout:指定日志信息的輸出格式;

一個Logger可以有多個Appender,也就是說日志信息可以同時輸出到多個設(shè)備上,每個Appender對應(yīng)

一種Layout(示例見下圖)。

Appender1

Layout

Logger

Appender2

Layout

二、Logger組件

1.Logger組件提供的方法:

Logger組件是LOG4J的核心組件,它代表了Log4J的日志記錄器,它能夠?qū)θ罩拘畔⑦M(jìn)行分類篩選。它由org.apache.log4j.Logger類實現(xiàn),提供了如下方法:java代碼package

org.apache.log4j;

public

class

Logger

{

//

Creation

&

retrieval

methods:

public

static

Logger

getRootLogger();

public

static

Logger

getLogger(String

name);

//

printing

methods:

public

void

debug(Object

message);

public

void

info(Object

message);

public

void

warn(Object

message);

public

void

error(Object

message);

public

void

fatal(Object

message);

//

generic

printing

method:

public

void

log(Priority

p,

Object

message);

}

2.在配置文件中配置Logger組件

可在Log4J配置文件中配置自己的Logger組件,示例:

log4j.logger.myLogger=WARN

以上代碼定義了一個Logger組件,名稱為myLogger,日志級別為WARN。

3.日志級別種類:

一共有五種,級別由高到低依次是:fatal、error、warn、info、debug。獲得Logger實例后,我們可調(diào)用以下方法之一輸出日志信息:

publicvoiddebug(Objectmessage);

//輸出debug級別的日志信息;

publicvoidinfo(Objectmessage);

//輸出info級別的日志信息;

publicvoidwarn(Objectmessage);

//輸出warn級別的日志信息;

publicvoiderror(Objectmessage);

//輸出error級別的日志信息;

publicvoidfatal(Objectmessage);//輸出fatal級別的日志信息;

publicvoidlog(Priorityp,Objectmessage);//輸出參數(shù)Priority指定級別的日志信息;

以上方法只有當(dāng)它的級別大于或等于Logger組件配置的日志級別時才調(diào)用。以前面我們配置的myLogger為例,它的日志級別為WARN,那么在程序中,它的warn()、error()、fatal()方法會被執(zhí)行。對于log()方法,只有當(dāng)它的參數(shù)Priority指定的日志級別大于或等于WARN時,它才會被執(zhí)行。

4.為什么需要對日志進(jìn)行分級?

在寫程序的時候,為了調(diào)試程序,我們會在很多出錯的地方輸出大量的日志信息。當(dāng)程序調(diào)試完,不需要這些信息時,將程序中這些輸出日志信息代碼刪除嗎?這樣費時費力,對于大型程序幾乎不可行。通過對日志分級,假如不想輸出WARN級別的日志信息,則Logger組件的級別調(diào)高即可,省時省心。

5.Logger組件的繼承性

Log4J提供了一個rootLogger,它是所有Logger組件的“祖先”,它永遠(yuǎn)存在,且不能通過名字檢索或引用,通過Logger.getRootLogger()方法取得它。配置rootLogger代碼:

log4j.rootLogger=INFO,console

可在配置文件中方便地配置存在繼承關(guān)系的Logger組件,凡是在符號“.”后面的組件都會成為在符號“.”前面的Logger組件的子類。例如:

log4j.apache.myLogger=WARN

log4j.apache.myLogger.mySonLogger=,file

以上代碼中,mySonLogger是myLogger的子類Logger組件。Logger組件的繼承關(guān)系:

.如果子類Logger組件沒有定義日志級別,則將繼承父類的日志級別;

.如果子類Logger組件定義了日志級別,就不會繼承父類的日志級別;

.黙認(rèn)情況下,子類Logger組件會繼承父類所有的Appender,把它們加入到自己的Appener;

.如果把子類Logger組件的additivity標(biāo)志設(shè)為false,那么它就不會繼承父類Appender。additivity標(biāo)志

默認(rèn)值為false;

以上配置的三個Logger繼承關(guān)系示例如圖:

rootLogger:日志級別=INFO

appender清單=console

myLogger:日志級別=WARNappender清單=null

mySonLogger:日志級別=nullappender清單=file

這三個Logger組件實際日志級別和Appender如下表:

Logger組件

日志級別

Appender清單

rootLogger

INFO

console

myLogger

WARN

console(繼承)

mySonLogger

WARN(繼承)

file,console(繼承)

三、Appender組件

Appender組件決定將日志信息輸出到什么地方。支持以下目的地:

.控制臺(Console);

.文件(File);

.GUI組件(GUIcomponent);

.套接口服務(wù)器(Remotesocketserver);

.NT的事件記錄器(NTEventLogger);

.UNIXSyslog守護(hù)進(jìn)程(RemoteUNIXSyslogdaemon);

一個Logger可同時對應(yīng)多個Appender,示例:myLogger配置二個Appender:一個file,一個是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(包含日志信息的級別和信息字符串);

.org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程和類別等信息);

為名稱為console的Appender配置SimpleLayout,代碼如下:

log4j.appender.console.layout=org.apache.log4j.SimpleLayout

輸出日志格式如下:

WARN-ThisisalogmessagefromthemyLogger

為名稱為file的Appender配置PatternLayout,代碼如下:

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%t%p-%m%n

輸出日志格式如下:

THREAD-1WARN-ThisisalogmessagefromthemyLogger

PatternLayout讓開發(fā)者依照ConversionPattern定義輸出格式。ConversionPattern中一些指定日志內(nèi)容和格式的預(yù)定義符號說明如下:

符號

描述

%r

自程序開始后消耗的毫秒數(shù)

%t

表示日志記錄請求生成的線程

%p

表示日專語句的優(yōu)先級

%r

與日志請求相關(guān)的類別名稱

%c

日志信息所在的類名

%m%n

表示日志信息的內(nèi)容五、Log4J的基本用法

1.定義配置文件

Log4J支持二種配置文件格式:XML和Java屬性文件(采用“鍵=值”形式)。以下為Java屬性文件

格式配置文件:

.配置Logger組件

配置rootLogger語法為:log4j.rootLogger=[priority],appenderName,appenderName,...

配置自定義Logger組件語法為:log4j.logger.loggerName=[priority],appenderName,appenderName,...

其中:priority為日志級別,可選值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL;

appenderName指定Appender組件,可指定多個;

.配置Appender組件

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

log4j.appender.appenderName=.of.appender.class

log4j.appender.appenderName.option1=value1

...

log4j.appender.appenderName.optionN=valueN

Log4J提供的Appender有以下幾種:

.apache.log4j.ConsoleAppender(控制臺);

.apache.log4j.FileAppender(文件);

.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件);

.apache.log4j.RollingFileAppender(文件大小到指定尺寸產(chǎn)生一個新的文件);

.apache.log4j.WriteAppender(將日志信息以流格式發(fā)送到任意指定地方);

.配置Layout組件

配置Layout組件語法為:

log4j.appender.appenderName.layout=.of.appender.class

log4j.appender.appenderName.layout.option1=value1

...

log4j.appender.appenderName.layout.optionN=valueN

下面為一配置文件示例,文件名為perties:##LOGGERS###configurerootlogger

log4j.rootLogger=INFO,console

#definealoggernamedmyLogger

log4j.logger.myLogger=WARN

#defineasecondloggerthatisachildtomyLogger

log4j.logger.myLogger.mySonLogger=,file##APPENDERS###defineanappendernamedconsole,whichissettobeaConsoleAppender

log4j.appender.console=org.apache.log4j.ConsoleAppender#defineanappendernamedfile,whichissettobeaRollingFileAppender

log4j.appender.file=org.apache.log4j.FileAppender

log4j.appender.file.File=log.txt##LAYOUTS##

#assianaSimpleLayouttoconsoleappender

log4j.appender.console.layout=org.apache.log4j.SimpleLayout#assianaPatternLayouttofileappender

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%t%p-%m%n

2.程序中使用Log4j

.獲得日志記錄器:

獲得rootLogger:LoggerrootLogger=Logger.getRootLogger();

獲得自定義Logger:LoggermyLogger=Logger.getLogger("log4j.logger.myLogger");

.讀取日志記錄器,配置Log4J環(huán)境;

a.BasicConfigurator.configure():自動快速地使用默認(rèn)Log4J環(huán)境;

b.Property.configurator.configure(StringconfigFilename):讀取使用Java屬性格式的配置文件并配置Log4J環(huán)境;

c.DOMConfigurator.configure(Stringfilename):讀取XML形式的配置文件并配置LOG4J環(huán)境;

.輸出日志信息;

在程序代碼中需要生成日志的地方,調(diào)用Logger的各種輸出日志方法輸出不同級別的日志,例如:

myLogger.debug("Thieisalogmessagefromthe"+myLogger.getName());

下面為一使用Log4J的程序,程序名為Test.java:java代碼

import

org.apache.log4j.Logger;

import

org.apache.log4j.PropertyConfigurator;

public

class

Test

{

public

static

void

main(String[]

args)

{

//Get

an

instance

of

the

myLogger

Logger

myLogger

=

Logger.getLogger("myLogger");

//Get

an

instance

of

the

childLogger

Logger

mySonLogger

=

Logger.getLogger("myLogger.mySonLogger");

//Load

the

proerties

using

the

PropertyConfigurator

PropertyConfigurator.configure("perties");

//Log

Messages

using

the

Parent

Logger

myLogger.debug("Thie

is

a

log

message

from

the

"

+

myLogger.getName());

myL("Thie

is

a

log

message

from

the

"

+

myLogger.getName());

myLogger.warn("Thie

is

a

log

message

from

the

"

+

myLogger.getName());

myLogger.error("Thie

is

a

log

message

from

the

"

+

myLogger.getName());

myLogger.fatal("Thie

is

a

log

message

from

the

"

+

myLogger.getName());

mySonLogger.debug("Thie

is

a

log

message

from

the

"

+

mySonLogger.getName());

mySonL("Thie

is

a

log

message

from

the

"

+

mySonLogger.getName());

mySonLogger.warn("Thie

is

a

log

message

from

the

"

+

mySonLogger.getName());

mySonLogger.error("Thie

is

a

log

message

from

the

"

+

mySonLogger.getName());

mySonLogger.fatal("Thie

is

a

log

message

from

the

"

+

mySonLogger.getName());

}

}

程序運行結(jié)果為:

WARN-ThieisalogmessagefromthemyLogger

ERROR-ThieisalogmessagefromthemyLogger

FATAL-ThieisalogmessagefromthemyLogger

WARN-ThieisalogmessagefromthemyLogger.mySonLogger

ERROR-ThieisalogmessagefromthemyLogger.mySonLogger

FATAL-ThieisalogmessagefromthemyLogger.mySonLogger

另在Test.class所在的目錄下看到一個log.txt文件,內(nèi)容如下:

WARN-ThieisalogmessagefromthemyLogger.mySonLogger

ERROR-ThieisalogmessagefromthemyLogger.mySonLogger

FATAL-ThieisalogmessagefromthemyLogger.mySonLogger

如將配置文件perties中語句

log4j.logger.myLogger.mySonLogger=,file

改為

log4j.logger.myLogger.mySonLogger=,file,console

再次運行程序,結(jié)果如下:

WARN-ThieisalogmessagefromthemyLogger

ERROR-ThieisalogmessagefromthemyLogger

FATAL-ThieisalogmessagefromthemyLogger

WARN-ThieisalogmessagefromthemyLogger.mySonLogger

WARN-ThieisalogmessagefromthemyLogger.mySonLogger

ERROR-ThieisalogmessagefromthemyLogger.mySonLogger

ERROR-ThieisalogmessagefromthemyLogger.mySonLogger

FATAL-ThieisalogmessagefromthemyLogger.mySonLogger

FATAL-ThieisalogmessagefromthemyLogger.mySonLogger

mySonLogger的日志在控制臺上輸出了二次,這是因為mySonLogger繼承了父類consoleAppender,

本身又定義了一個consoleAppender,因而有二個consoleAppender。六、在web應(yīng)用中使用Log4J

創(chuàng)建一個Servlet,在它初始化方法中讀取Log4J配置文件并配置Log4J環(huán)境,這個Servlet在Web應(yīng)用啟

動時候被加載和初始化,然后就可在其它Web組件中獲取Logger對象并輸出日志。

1.創(chuàng)建用于配置Log4J環(huán)境的Servletjava代碼import

javax.servlet.*;

import

javax.servlet.http.*;

import

java.io.*;

import

java.util.*;

import

org.apache.log4j.PropertyConfigurator;

public

class

Log4JServlet

extends

HttpServlet

{

public

void

init()

throws

ServletException

{

String

path

=

getServletContext().getRealPath("/");

//getInitParameter("propfile")方法從web.xml文件中讀取Log4J配置文件的名字"profile"。

String

propfile

=

path

+

getInitParameter("propfile");

PropertyConfigurator.configure(propfile);

}

}

該Servlet在web.xml中的配置如下:xml代碼<servlet>

<servlet-name>log4jServlet</servlet-name>

<servlet-class>Log4JServlet</servlet-class>

<init-param>

<param-name>propfile</param-name>

<param-value>/WEB-INF/perties</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

2.在login.jsp中輸出日志

<import="org.apache.log4j.Logger"%>

<html>

<head>

<title>login</title>

</head>

<body>

<%

LoggermyLogger=Logger.getLogger("myLogger");

LoggermySonLogger=Logger.getLogger("myLogger.mySonLogger");

myLogger.debug("Thieisalogmessagefromthe"+myLogger.getName());

myL("Thieisalogmessagefromthe"+myLogger.getName());

myLogger.warn("Thieisalogmessagefromthe"+

myLogger.getName());

myLogger.error("Thieisalogmessagefromthe"+myLogger.getName());

myLogger.fatal("Thieisalogmessagefromthe"+myLogger.getName());

mySonLogger.debug("Thieisalogmessagefromthe"+mySonLogger.getName());

mySonL("Thieisalogmessagefromthe"+mySonLogger.getName());

mySonLogger.warn("Thieisalogmessagefromthe"+

mySonLogger.getName());

mySonLogger.error("Thieisalogmessagefromthe"+mySonLogger.getName());

mySonLogger.fatal("Thieisalogmessagefromthe"+mySonLogger.getName());

%>

<br>

<formname="loginForm"method="post"action="dispatcher">

username:<inputtype="text"name="username">

<b

溫馨提示

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

評論

0/150

提交評論