log4j配置webapp日志系統


1.基礎知識: 
Log4j的中文文檔 (這是根據最新的log4j(jakarta-log4j-1.2.8)的開發包自帶文檔的manual翻譯的) 
http://dev.csdn.net/develop/article/29/29441.shtm
對應的英文原文: 
Short introduction to log4j 
http://logging.apache.org/log4j/docs/manual.html

2.步驟 
1)log4j.jar放到jsp-examples\WEB-INF\lib下; 
2)在jsp-examples下新建properties\log4j.properties; 
3)log4j.properties內容: 
#log4j.properties

log4j.rootLogger=info, A1

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A1.file=${webappHome}/logs/tomcat_log_ 
log4j.appender.A1.DatePattern=yyyy-MM-dd'.html' 
log4j.appender.A1.layout=org.apache.log4j.HTMLLayout

4)“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-examples\”新建上述屬性文件所設置的存放

日志文件的logs文件夾; 
注釋: 
tomcat_log_是文件名,可以不用預先新建該文件;如果預先建了,則日志文件直接為tomcat_log_2007-

03-05.html格式,如果之前無該文件,在第一次生成的日志文件名稱為tomcat_log_;

5)進入目錄“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-examples\WEB-INF\classes”,新

建“log4j\Log4JInit.java”;

6)Log4JInit.java內容: 
package log4j; 
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import org.apache.log4j.*;

public class Log4JInit extends HttpServlet {

public void init() throws ServletException { 
String prefix = getServletContext().getRealPath("/"); 
String test = getServletContext().getRealPath(""); 
System.out.println(prefix); 
System.out.println(test); 
System.setProperty("webappHome", test); 
String file = getServletConfig().getInitParameter("log4j-config-file"); 
System.out.println(prefix+file); 
// 從Servlet參數讀取log4j的配置文件 
if (file != null) { 
PropertyConfigurator.configure(prefix + file); 
}


public void doGet(HttpServletRequest request,HttpServletResponse response)throws 
IOException, ServletException {}

public void doPost(HttpServletRequest request,HttpServletResponse response)throws 
IOException, ServletException {}

}

注意: 
“System.setProperty("webappHome", test);”這行代碼要出現在“PropertyConfigurator.configure

(prefix + file);”這行代碼之前;因為這樣才給"webappHome"設置值了,log4j.properties文件中的“

log4j.appender.A1.file=${webappHome}/logs/tomcat_log_”中的“${webappHome}”這個環境變量才被

賦值了,否則無法輸出日志文件;

7)設置“jsp-examples\WEB-INF\web.xml”,使上述Log4JInit.java這個servlet自動啟動,在web.xml

中添加: 
<servlet> 
<servlet-name>log4jinit</servlet-name> 
<servlet-class>log4j.Log4JInit</servlet-class> 
<init-param> 
<param-name> log4j-config-file </param-name> 
<param-value>/properties/log4j.properties</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet>

注意:上面的load-on-startup應設為1,以便在Web容器啟動時即裝入該Servlet。log4j.properties文件

放在根的properties子目錄中,也可以把它放在其它目錄中。應該把.properties文件集中存放,這樣方

便管理。

8)在webapp中使用log4j;進入目錄“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-

examples\WEB-INF\classes\dates”,修改JspCalendar.java,加上日志信息: 
//JspCalendar.java 
package dates;

import java.text.DateFormat; 
import java.util.*; 
import org.apache.log4j.Logger; 
import org.apache.log4j.Level; 
import org.apache.log4j.*;

public class JspCalendar { 
Calendar calendar = null; 
static Logger logger = Logger.getLogger(JspCalendar.class);

public JspCalendar() { 
logger.debug("This is debug."); 
logger.info("This is an info."); 
logger.warn("This is a warning."); 
logger.error("This is an error."); 
logger.fatal("This is a fatal error.");

calendar = Calendar.getInstance(); 
Date trialTime = new Date(); 
calendar.setTime(trialTime); 
}

public int getYear() {

return calendar.get(Calendar.YEAR);

}

…… 
//其他內容不變;

}

9)修改系統日期,這樣才能手工觸發按日生成的日志;

10)重啟tomcat;

11)在IE中輸入“http://localhost:8086/jsp-examples/dates/date.jsp”;

12)查看日志目錄“F:\UserWorkSpace\jiangcm\Tomcat 5.0\webapps\jsp-examples\logs”,耶!生成

以日期命名的html日志文件tomcat_log_2007-03-05.html了!哈哈,太開心了!

注釋: 
1.tomcat本身也會自動按日生成日志文件,在目錄“F:\UserWorkSpace\jiangcm\Tomcat 5.0\logs”下; 
2.jdk如果無法編譯servlet,需要在tomcat\common\lib下把servlet-api.jar拷貝到jdk\jre\lib下; 
問題: 
1.把tomcat_log_2007-03-05.html文件名改為:jsp-examples_log_2007-03-05.html; 
2.xml配置方式有待實踐和學習; 
參考資料: 
1.http://www.3doing.net/forums/printpage.asp?BoardID=11&ID=184

2.http://wangluwww.spaces.live.com/blog/

3.Log4j的中文文檔 (這是根據最新的log4j(jakarta-log4j-1.2.8)的開發包自帶文檔的manual翻譯的) 
http://dev.csdn.net/develop/article/29/29441.shtm

4.http://www.javaeye.com/post/126014 
怕麻煩的話可以考慮放應用下的某一個目錄下,整個Servlet,專門用來設置環境變量和讀取log4j的配置

文件 ,初始化Servlet的時候,應用程序的目錄是固定的 
可以通過System.setProperty("webappHome",this.getServletContext().getRealPath(""));來設置當前

應用的目錄的絕對路徑為java內部的環境變量,在log4j的配置文件里面用${webappHome}/WEB-

INF/conf/log/Application.log 來配置該文件的絕對路徑就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM