1.1準(zhǔn)備工作
一。Tomcat已正確配置與使用。
二。軟件下載:log4j------
http://www.apache.org/dist/jakarta/log4j/jakarta-log4j-1.2.8.zip
1.2. Log4j簡(jiǎn)介
在強(qiáng)調(diào)可重用組件開(kāi)發(fā)的今天,除了自己從頭到尾開(kāi)發(fā)一個(gè)可重用的日志操作類外,Apache為我們提供了一個(gè)強(qiáng)有力的日志操作包-Log4j。
Log4j是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。最令人感興趣的就是,這些可以通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼。
此外,通過(guò)Log4j其他語(yǔ)言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其語(yǔ)法和用法與在Java程序中一樣,使得多語(yǔ)言分布式系統(tǒng)得到一個(gè)統(tǒng)一一致的日志組件模塊。而且,通過(guò)使用各種第三方擴(kuò)展,您可以很方便地將Log4j集成到J2EE、JINI甚至是SNMP應(yīng)用中。本文介紹的Log4j版本是1.2.8,怎樣通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,主要的應(yīng)用平臺(tái)是Tomcat4.
1.3。Log4j的配置。
首先到j(luò)akarta下載一個(gè)log4j的組件。把jakarta-log4j-1.2.8\dist\lib下的log4j-1.2.8.jar文件copy到classpath指定的目錄下!可以是Tomcat的common\lib目錄下,也可以是你需要用到log4j的application下的lib目錄。
1.4在Application目錄下的web.xml文件加入以后代碼
<servlet>
<servlet-name>log4j</servlet-name>
<servlet-class>com.apache.jakarta.log4j.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
這段代碼的意思是說(shuō),在Tomcat啟動(dòng)時(shí)加載com.apache.jakarta.log4j.Log4jInit這個(gè)名叫Log4jInit.class這個(gè)類文件。其中Log4jInit.class的源代碼如下
package com.apache.jakarta.log4j;
import org.apache.log4j.PropertyConfigurator;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Log4jInit extends HttpServlet {
public void init() {
String prefix = getServletContext().getRealPath("/"
;
String file = getInitParameter("log4j"
;
// if the log4j-init-file is not set, then no point in trying
System.out.println("................log4j start"
;
if(file != null) {
PropertyConfigurator.configure(prefix+file);
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
}
}
這段代碼很簡(jiǎn)單,可以看出,在加載的過(guò)程中,程序會(huì)讀取/WEB-INF/log4j.properties這個(gè)文件
這個(gè)文件就是本文的重點(diǎn),也就是log4j的配置文件。
# Set root logger level to DEBUG and its only appender to A1
#log4j中有五級(jí)logger
#FATAL 0
#ERROR 3
#WARN 4
#INFO 6
#DEBUG 7
#配置根Logger,其語(yǔ)法為:
#log4j.rootLogger = [ level ] , appenderName, appenderName, …
log4j.rootLogger=INFO, A1 ,R
#這一句設(shè)置以為著所有的log都輸出
#如果為log4j.rootLogger=WARN, 則意味著只有WARN,ERROR,FATAL
#被輸出,DEBUG,INFO將被屏蔽掉.
# A1 is set to be a ConsoleAppender.
#log4j中Appender有幾層如控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等
#ConsoleAppender輸出到控制臺(tái)
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 使用的輸出布局,其中l(wèi)og4j提供4種布局. org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#org.apche.log4j.PatternLayout(可以靈活地指定布局模式),
#org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),
#org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
#靈活定義輸出格式 具體查看log4j javadoc org.apache.log4j.PatternLayout
#d 時(shí)間 ....
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#R 輸出到文件 RollingFileAppender的擴(kuò)展,可以提供一種日志的備份功能。
log4j.appender.R=org.apache.log4j.RollingFileAppender
#日志文件的名稱
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
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
配置以這里就差不多了,如果你想更深入了解配置文件的各個(gè)細(xì)節(jié),可以去查看docs。還有,在文章的最后面我們提供配置文件中一些主要的語(yǔ)法。下面我們來(lái)看看怎樣在程序中使用log4j.
1.4 Log4j的使用。
使用Log4j,第一步就是獲取日志記錄器,這個(gè)記錄器將負(fù)責(zé)控制日志信息。其語(yǔ)法為:
public static Logger getLogger( String name),
必須在使用前要把這個(gè)類導(dǎo)入
import org.apache.log4j.Logger;
name一般是類文件的名字,如下:
static Logger logger = Logger.getLogger ("".class.getName () ) ;
您就可以輕松地使用不同優(yōu)先級(jí)別的日志記錄語(yǔ)句插入到您想記錄日志的任何地方,其語(yǔ)法如下:
logger.debug ( Object message ) ;
logger.info ( Object message ) ;
logger.warn ( Object message) ;
logger.error ( Object message ) ;
為什么這里要分級(jí)別的呢?試想一下,我們?cè)趯?xiě)程序的時(shí)候,為了調(diào)試程序,會(huì)在很多會(huì)出錯(cuò)的地方加入大量的logger.info();信息。當(dāng)然程序調(diào)試完畢,我們不需要這些輸出信息了,那怎么辦呢?以前的做法是把每個(gè)程序中的logger.info刪除,但這是不現(xiàn)實(shí)的,如果程序不大還可以,但如果程序很多,做這些事情就很煩人了。但因?yàn)閘og4j分級(jí)別了,當(dāng)我們不需要輸出這樣調(diào)試時(shí)用到的log.info()時(shí),我們可以把輸出的級(jí)別調(diào)高,如調(diào)到warn,或error級(jí)別,這樣info級(jí)別及以下的級(jí)別就不會(huì)出輸出了,是不是很方便的呢?
其實(shí)除了這種使用方式,log4j還有其它的使用方面,不需要配置文件,直接在程序中定義輸入出級(jí)別,層次等信息,如果要了解這方法的使用,可以參考文檔。
1.5。附注:
以下是配置文件的一些重要的語(yǔ)法
定義配置文件
其實(shí)您也可以完全不使用配置文件,而是在代碼中配置Log4j環(huán)境。但是,使用配置文件將使您的應(yīng)用程序更加靈活。
Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。下面我們介紹使用Java特性文件做為配置文件的方法:
配置根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è)輸出目的地。
配置日志信息輸出目的地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ā)送到任意指定的地方)
配置日志信息的格式(布局),其語(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í)間、線程、類別等等信息)
本文引用通告地址: http://blog.csdn.net/zlfh/services/trackbacks/459662.aspx