版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
------------------------------------------------------------------------Log4J使用完全手冊(cè)Log4J使用完全手冊(cè)Log4J是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目(),它是一個(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)行分類(lèi)篩選。它由org.apache.log4j.Logger類(lèi)實(shí)現(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
以上代碼定義了一個(gè)Logger組件,名稱為myLogger,日志級(jí)別為WARN。
3.日志級(jí)別種類(lèi):
一共有五種,級(jí)別由高到低依次是:fatal、error、warn、info、debug。獲得Logger實(shí)例后,我們可調(diào)用以下方法之一輸出日志信息:
publicvoiddebug(Objectmessage);
//輸出debug級(jí)別的日志信息;
publicvoidinfo(Objectmessage);
//輸出info級(jí)別的日志信息;
publicvoidwarn(Objectmessage);
//輸出warn級(jí)別的日志信息;
publicvoiderror(Objectmessage);
//輸出error級(jí)別的日志信息;
publicvoidfatal(Objectmessage);//輸出fatal級(jí)別的日志信息;
publicvoidlog(Priorityp,Objectmessage);//輸出參數(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í)?
在寫(xiě)程序的時(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è)rootLogger,它是所有Logger組件的“祖先”,它永遠(yuǎn)存在,且不能通過(guò)名字檢索或引用,通過(guò)Logger.getRootLogger()方法取得它。配置rootLogger代碼:
log4j.rootLogger=INFO,console
可在配置文件中方便地配置存在繼承關(guān)系的Logger組件,凡是在符號(hào)“.”后面的組件都會(huì)成為在符號(hào)“.”前面的Logger組件的子類(lèi)。例如:
log4j.apache.myLogger=WARN
log4j.apache.myLogger.mySonLogger=,file
以上代碼中,mySonLogger是myLogger的子類(lèi)Logger組件。Logger組件的繼承關(guān)系:
.如果子類(lèi)Logger組件沒(méi)有定義日志級(jí)別,則將繼承父類(lèi)的日志級(jí)別;
.如果子類(lèi)Logger組件定義了日志級(jí)別,就不會(huì)繼承父類(lèi)的日志級(jí)別;
.黙認(rèn)情況下,子類(lèi)Logger組件會(huì)繼承父類(lèi)所有的Appender,把它們加入到自己的Appener;
.如果把子類(lèi)Logger組件的additivity標(biāo)志設(shè)為false,那么它就不會(huì)繼承父類(lèi)Appender。additivity標(biāo)志
默認(rèn)值為false;
以上配置的三個(gè)Logger繼承關(guān)系示例如圖:
rootLogger:日志級(jí)別=INFO
appender清單=console
↑
myLogger:日志級(jí)別=WARNappender清單=null
↑
mySonLogger:日志級(jí)別=nullappender清單=file
這三個(gè)Logger組件實(shí)際日志級(jí)別和Appender如下表:
Logger組件
日志級(jí)別
Appender清單
rootLogger
INFO
console
myLogger
WARN
console(繼承)
mySonLogger
WARN(繼承)
file,console(繼承)
三、Appender組件
Appender組件決定將日志信息輸出到什么地方。支持以下目的地:
.控制臺(tái)(Console);
.文件(File);
.GUI組件(GUIcomponent);
.套接口服務(wù)器(Remotesocketserver);
.NT的事件記錄器(NTEventLogger);
.UNIXSyslog守護(hù)進(jìn)程(RemoteUNIXSyslogdaemon);
一個(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組件決定日志輸出格式,有以下幾種類(lèi)型:
.org.apache.log4j.HTMLLayout(以HTML表格形式布局);
.org.apache.log4j.PatternLayout(可以靈活地指定布局模式);
.org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串);
.org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程和類(lèi)別等信息);
為名稱為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讓開(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)的類(lèi)別名稱
%c
日志信息所在的類(lèi)名
%m%n
表示日志信息的內(nèi)容五、Log4J的基本用法
1.定義配置文件
Log4J支持二種配置文件格式:XML和Java屬性文件(采用“鍵=值”形式)。以下為Java屬性文件
格式配置文件:
.配置Logger組件
配置rootLogger語(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有以下幾種:
.apache.log4j.ConsoleAppender(控制臺(tái));
.apache.log4j.FileAppender(文件);
.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件);
.apache.log4j.RollingFileAppender(文件大小到指定尺寸產(chǎn)生一個(gè)新的文件);
.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###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():自動(dòng)快速地使用默認(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的各種輸出日志方法輸出不同級(jí)別的日志,例如:
myLogger.debug("Thieisalogmessagefromthe"+myLogger.getName());
下面為一使用Log4J的程序,程序名為T(mén)est.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());
}
}
程序運(yùn)行結(jié)果為:
WARN-ThieisalogmessagefromthemyLogger
ERROR-ThieisalogmessagefromthemyLogger
FATAL-ThieisalogmessagefromthemyLogger
WARN-ThieisalogmessagefromthemyLogger.mySonLogger
ERROR-ThieisalogmessagefromthemyLogger.mySonLogger
FATAL-ThieisalogmessagefromthemyLogger.mySonLogger
另在Test.class所在的目錄下看到一個(gè)log.txt文件,內(nèi)容如下:
WARN-ThieisalogmessagefromthemyLogger.mySonLogger
ERROR-ThieisalogmessagefromthemyLogger.mySonLogger
FATAL-ThieisalogmessagefromthemyLogger.mySonLogger
如將配置文件perties中語(yǔ)句
log4j.logger.myLogger.mySonLogger=,file
改為
log4j.logger.myLogger.mySonLogger=,file,console
再次運(yùn)行程序,結(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的日志在控制臺(tái)上輸出了二次,這是因?yàn)閙ySonLogger繼承了父類(lèi)consoleAppender,
本身又定義了一個(gè)consoleAppender,因而有二個(gè)consoleAppender。六、在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代碼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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44865-2024物聯(lián)網(wǎng)基于物聯(lián)網(wǎng)和傳感網(wǎng)技術(shù)的動(dòng)產(chǎn)監(jiān)管集成平臺(tái)系統(tǒng)要求
- 物流車(chē)行駛規(guī)范演練
- 配電裝置最小安全凈距
- 氣道腫物鑒別與治療
- 智能銀行解決方案
- 第五章 萬(wàn)有引力定律宇宙航行 2025年高考物理基礎(chǔ)專項(xiàng)復(fù)習(xí)
- 2.3.1物質(zhì)的量 課件高一上學(xué)期化學(xué)人教版(2019)必修第一冊(cè)
- 公司七夕團(tuán)建活動(dòng)
- 初中中秋節(jié)教案
- 彩色世界教案反思
- 西學(xué)中試題答案在后(已排版)
- 皮膚牽引護(hù)理技術(shù)操作流程及評(píng)分標(biāo)準(zhǔn)
- 醫(yī)患溝通特殊問(wèn)題處理課件
- 小學(xué)數(shù)學(xué)說(shuō)課課件
- 劍橋英語(yǔ)PET真題校園版
- Python程序設(shè)計(jì)分支結(jié)構(gòu)
- AMZ123-電商行業(yè):2023年跨境電商職場(chǎng)現(xiàn)狀調(diào)研報(bào)告
- 中鹽青海昆侖堿業(yè)有限公司柯柯鹽礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 安全操作規(guī)程評(píng)審報(bào)告
- 起重電磁吸盤(pán)安全操作規(guī)程
- 監(jiān)理檢測(cè)與試驗(yàn)儀器設(shè)備一覽表實(shí)用文檔
評(píng)論
0/150
提交評(píng)論