.引言:
《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