1.引言:
1)兩次周會fengy都報告說要建一個日志系統(tǒng),用log4j來配置,一直好奇,log4j是什么東東,有何用處

呢?今天柳暗花明了:
《log4j相比System.out的優(yōu)勢》(自己blog中的文章)
??? Log4j就是幫助開發(fā)人員進(jìn)行日志輸出管理的API類庫。它最重要的特點(diǎn)就可以配置文件靈活的設(shè)置日

志信息的優(yōu)先級、日志信息的輸出目的地以及日志信息的輸出格式。

??? Log4j除了可以記錄程序運(yùn)行日志信息外還有一重要的功能就是用來顯示調(diào)試信息。

??? 程序員經(jīng)常會遇到脫離java ide環(huán)境調(diào)試程序的情況,這時大多數(shù)人會選擇使用System.out.println

語句輸出某個變量值的方法進(jìn)行調(diào)試。這樣會帶來一個非常麻煩的問題:一旦哪天程序員決定不要顯示這

些System.out.println的東西了就只能一行行的把這些垃圾語句注釋掉。若哪天又需調(diào)試變量值,則只能

再一行行去掉這些注釋恢復(fù)System.out.println語句。

??? 使用log4j可以很好的處理類似情況。

2)log4j——一個讓我發(fā)愁了一段時間的東東:
?? ?12月份的時候fengy讓配置log4j,自己折騰了一個星期都沒弄出來,并且很不明白到底是哪個環(huán)

節(jié)出問題了。因?yàn)楫?dāng)時對相對路徑,常用接口等都不是很了解,wangwm配出來后,還是不知道自己的為什

么跑不起來。
?? ?現(xiàn)在回頭想想,一直沒有進(jìn)展,是因?yàn)椋╝)沒有java.io的知識;(b)沒有java相對路徑,絕

對路徑的知識;(c)根本不理解要完成配置,必須完成哪些工作。
?? ?當(dāng)時弄不出來,一直就停留在.java文件中的“PropertyConfigurator.configure

(myfile.getPath());”這行代碼里了,當(dāng)時無論怎么都讀不到log4j.properties文件,想了很多辦法,

包括查如何讀取屬性文件,如果用相對路徑讀取屬性文件,等等。但這些都是霧里看花,本質(zhì)沒弄清楚,

查再多的細(xì)節(jié)都不至于事。
?? ?現(xiàn)在總算對log4j的配置有了一點(diǎn)認(rèn)識了!

2.首先分清在各個環(huán)境下配置log4j應(yīng)完成什么事情:
1)java工程環(huán)境:
jdk1.4之后就集成了日志功能,D:\Program Files\Java\jre1.5.0_04\lib目錄下有l(wèi)ogging.properties

文件,如果要使用日志,直接使用或者修改這個logging.properties屬性文件就可以了!

2)在tomcat中用log4j配置日志系統(tǒng):
a)
第一步:下載log4j.jar,并把log4j.jar放入$CATALINA_HOME/common/lib.
第二步:寫配置文件log4j.properties:
#log4j.properties

log4j.rootLogger=warn, A1,warnlog
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

log4j.appender.warnlog=org.apache.log4j.FileAppender ?
log4j.appender.warnlog.MaxFileSize=50000KB? ?
log4j.appender.warnlog.MaxBackupIndex=0? ?
log4j.appender.warnlog.file=F:/UserWorkSpace/jiangcm/logs/warn.html ?
log4j.appender.warnlog.layout=org.apache.log4j.HTMLLayout ?
log4j.appender.warnlog.layout.ConversionPattern=%d?? %X?? %-5p???? %m%n? ?

log4j.logger.org.apache=warn
第三步:在目錄“F:/UserWorkSpace/jiangcm/logs”下新建warn.html文件;
第四步:把該log4j.properties文件放到$CATALINA_HOME/common/classes/目錄下.
第五步:重啟tomcat.
ok,現(xiàn)在就已經(jīng)在tomcat中配置好log4j了。

b)如何使用?——在.java文件中得到一個Logger對象,然后就可以直接輸出日志了。如下例子所示:
//Bar.java
package com.foo;
import org.apache.log4j.Logger;

public class Bar {
static Logger logger = Logger.getLogger(Bar.class);
public void doIt() {
logger.debug("there is a debug...");
logger.info("there is a info...");
logger.warn("there is a warning...");
}
}

ok!也就是說在tomcat中配置,只需要把log4j.jar和log4j.properties分別放到$CATALINA_HOME/common/

的lib和classes下就ok了!不需要再做別的設(shè)置,在.java中直接使用即可。

3)在tomcat的webapp中配置log4j:也就是配置單個的webapp。
這個就有點(diǎn)麻煩了!因?yàn)樵谡麄€tomcat中配置,tomcat會自動讀入log4j.properties;但是在webapp中需

要寫一個Servlet,初始化log4j,并且在web.xml中設(shè)置給servlet為tomcat啟動時也自動啟動。

這種方法自己還沒有實(shí)驗(yàn)成功,不過看過wangwm配置成功了。

不過大致的步驟都是一樣的,大概有以下幾步吧:
第一步:下載log4j.jar,并把log4j.jar放入webappname/WEB-INF/classes/lib.
第二步:寫配置文件log4j.properties:
注:
解決log4j輸出的日志文件的位置的配置問題
http://wangluwww.spaces.live.com/blog/
我一直希望自己的web應(yīng)用的配置能夠簡化,最好的方式就是打個包后扔哪都能用,即使非得再做一些配

置的話,也希望只是一些連接池的配置信息。這個目標(biāo)在現(xiàn)在手頭的這個項(xiàng)目中也幾乎達(dá)到了,除了log

文件的位置。
在log4j的配置文件中對于log輸出的路徑一向都是使用絕對路徑,這樣就導(dǎo)致在不同的機(jī)器上部署時都得

重新定義一下log文件的輸出位置。雖說費(fèi)時不多,可對于我這種寧可少一事,不愿多一事的人來說,總

是覺得有點(diǎn)郁悶。
踏破鐵鞋無覓,得來不費(fèi)功夫。不經(jīng)意見看到了一個文檔,介紹說log4j的配置文件支持windows的環(huán)境變

量,格式類似velocity:${env},ok,問題解決:
一般來說我們會將一些初始化的信息放到web.xml中,以便在系統(tǒng)啟動時就運(yùn)行。循此思路,將log文件的

位置放到webapp下面的任意處,如webapp/WEB-INF/conf/logs下面,則可以在log4j.properties文件中做

如下定義:
log4j.appender.R.File=${webappHome}/WEB-INF/conf/logs/sysout.log
其中的${webappHome}即是通過System.setProperty("webappHome", webappHome);實(shí)現(xiàn)的,此操作可通過

一初始的servlet進(jìn)行,具體方法略。


第四步:把該log4j.properties文件放到WEB-INF/classes/目錄下.
第五步:寫一個初始化的servlet;
第六步:在web.xml中配置該servlet,并設(shè)置為自動啟動;
第七步:重啟tomcat.

具體做的時候可以參考以下資料:

竹筍炒肉 Log4J學(xué)習(xí)筆記(1)(2)(3)
http://hedong.3322.org/archives/000193.html
http://hedong.3322.org/archives/000195.html
http://hedong.3322.org/archives/000197.html


具體的實(shí)踐明天繼續(xù)或者等測評完157弄好后再繼續(xù)。
ok!