log4j中使用相對路徑
很多朋友想把日志寫在web應用當中,下面來介紹一下:log4j.properties文件配置如下:
1
log4j.rootLogger=ERROR,CONSOLE,A1
2
log4j.addivity.org.apache=true
3
4
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
5
log4j.appender.A1.File=${webappHome}/WEB-INF/logs/website.log
6
log4j.appender.A1.Encoding=GBK
7
log4j.appender.A1.Threshold=DEBUG
8
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
9
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
10
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

2

3

4

5

6

7

8

9

10

這里,我們使用${webappHome}來取得應用路徑,webappHome是個變量。我們是從哪里取得的值呢?是從我們自己的類中,因此必須寫這個類。很簡單:
1
package com.clientmanager.util;
2
3
import javax.servlet.ServletConfig;
4
import javax.servlet.ServletException;
5
import javax.servlet.http.HttpServlet;
6
7
import org.apache.log4j.PropertyConfigurator;
8
9
10
public class Log4jInit extends HttpServlet {
11
12
13
public void init(ServletConfig config) throws ServletException {
14
String prefix = config.getServletContext().getRealPath("/"); //獲取當前路徑
15
String file = config.getInitParameter("log4j");//從web.xml中獲取參數值,找到log4j這個文件
16
System.setProperty("webappHome", prefix); //log4j.properties文件中的變量是在這里設置的
17
if (file != null) {
18
PropertyConfigurator.configure(prefix + file);
19
}
20
}
21
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

好了,有了這個類,下一步是要在服務器啟動時來初始化這個類。所以要在web.xml中進行配置
web.xml
1
<servlet>
2
<servlet-name>log4j-init</servlet-name>
3
<servlet-class>com.clientmanager.util.Log4jInit</servlet-class>
4
<init-param>
5
<param-name>log4j</param-name>
6
<param-value>WEB-INF/classes/log4j.properties</param-value>
7
</init-param>
8
<load-on-startup>0</load-on-startup>
9
</servlet>

2

3

4

5

6

7

8

9

最后說一點,如果你用struts,而在web.xml中配置了ServletAction,它的啟動級別為<load-onstartup>0</load-on-startup>,那么我們的這個類的的啟動級別不能低于它,否則可能會出現找不到路徑的問題
posted on 2009-06-05 19:24 void 閱讀(450) 評論(0) 編輯 收藏 所屬分類: Log4j