在Web
應用中,應該在哪兒對Log4J進行配置呢?首先要明確,Log4J必須在應用的其它代碼執行前完成初始化。因為Servlet
是在Web服務器啟動時立即裝入的,所以,在Web應用中一般使用一個專門的Servlet來完成Log4J的配置,并保證在web.xml的配置中,這
個Servlet位于其它Servlet之前。下面是一個例子,代碼如下:
servlet內容:
<servlet>
<servlet-name>log4jinit</servlet-name>
<servlet-class>log4j.Log4JInit</servlet-class>
<init-param>
<param-name> log4j-init-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文件集中存放,這樣方便管理。
一個還沒解決的問題:
當啟動tomcat的時候,會出現以下信息:
servlet內容:
1
package com.foo;
2
3
import org.apache.log4j.PropertyConfigurator;
4
import javax.servlet.http.HttpServlet;
5
import javax.servlet.http.HttpServletRequest;
6
import javax.servlet.http.HttpServletResponse;
7
import java.io.PrintWriter;
8
import java.io.IOException;
9
10
public class Log4jInit extends HttpServlet {
11
12
public
13
void init() {
14
String prefix = getServletContext().getRealPath("/"); //get webapp root path
15
String file = getInitParameter("log4j-init-file");
16
// if the log4j-init-file is not set, then no point in trying
17
if(file != null) {
18
PropertyConfigurator.configure(prefix+file);
19
}
20
}
21
22
public
23
void doGet(HttpServletRequest req, HttpServletResponse res) {
24
}
25
}
26
在web.xml 中添加: 
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26










一個還沒解決的問題:
當啟動tomcat的時候,會出現以下信息:
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
但不影響log4j的使用。log4j:WARN Please initialize the log4j system properly.