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

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

志信息的優先級、日志信息的輸出目的地以及日志信息的輸出格式。

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

??? 程序員經常會遇到脫離java ide環境調試程序的情況,這時大多數人會選擇使用System.out.println

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

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

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

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

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

節出問題了。因為當時對相對路徑,常用接口等都不是很了解,wangwm配出來后,還是不知道自己的為什

么跑不起來。
?? ?現在回頭想想,一直沒有進展,是因為(a)沒有java.io的知識;(b)沒有java相對路徑,絕

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

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

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

查再多的細節都不至于事。
?? ?現在總算對log4j的配置有了一點認識了!

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

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

2)在tomcat中用log4j配置日志系統:
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,現在就已經在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了!不需要再做別的設置,在.java中直接使用即可。

3)在tomcat的webapp中配置log4j:也就是配置單個的webapp。
這個就有點麻煩了!因為在整個tomcat中配置,tomcat會自動讀入log4j.properties;但是在webapp中需

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

這種方法自己還沒有實驗成功,不過看過wangwm配置成功了。

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

置的話,也希望只是一些連接池的配置信息。這個目標在現在手頭的這個項目中也幾乎達到了,除了log

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

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

是覺得有點郁悶。
踏破鐵鞋無覓,得來不費功夫。不經意見看到了一個文檔,介紹說log4j的配置文件支持windows的環境變

量,格式類似velocity:${env},ok,問題解決:
一般來說我們會將一些初始化的信息放到web.xml中,以便在系統啟動時就運行。循此思路,將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);實現的,此操作可通過

一初始的servlet進行,具體方法略。


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

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

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


具體的實踐明天繼續或者等測評完157弄好后再繼續。
ok!