log4j.properties文件配置如下:
log4j.appender.Rlogfile=org.apache.log4j.RollingFileAppender
log4j.appender.Rlogfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Rlogfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.Rlogfile.File=${webRoot}/logs/log.log
log4j.appender.Rlogfile.MaxFileSize=2048KB
log4j.appender.Rlogfile.MaxBackupIndex=10
這里,我們使用${webRoot}來(lái)取得應(yīng)用路徑,webRoot是個(gè)變量。我們是從哪里取得的值呢?是從我們自己的類中,因此必須寫這個(gè)類。
package com.clientmanager.util;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/"); //獲取當(dāng)前路徑
String file = config.getInitParameter("log4j");//從web.xml中獲取參數(shù)值,找到log4j這個(gè)文件
System.setProperty("webRoot", prefix); //log4j.properties文件中的變量是在這里設(shè)置的
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
}
web.xml加載這個(gè)servlet
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/"); //獲取當(dāng)前路徑
String file = config.getInitParameter("log4j");//從web.xml中獲取參數(shù)值,找到log4j這個(gè)文件
System.setProperty("webRoot", prefix); //log4j.properties文件中的變量是在這里設(shè)置的
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
}
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.clientmanager.util.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
最后說(shuō)一點(diǎn),如果你用struts,而在web.xml中配置了ServletAction,它的啟動(dòng)級(jí)別為<load-onstartup>0</load-on-startup>,那么我們的這個(gè)類的的啟動(dòng)級(jí)別不能低于它,否則可能會(huì)出現(xiàn)找不到路徑的問(wèn)題。
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.clientmanager.util.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>