Log4J输出日志到WEB工程目录的实现方法

将Log4j的日志输出的web工程目录会方便系统移植、日志远程查看。那么如何来实现呢?可以通过一个自定义的Servlet设置系统属性的方法来实现,只需要几句代码,而且可配置、移植方便。 
一、Servlet代码 

package com.wallimn.gyz.util;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/**
 * 设置一些系统变量<br/>*/
public class SystemServlet extends HttpServlet {

    private static final long serialVersionUID = 8164865597169685698L;
    /**
     * 读配置,设置系统变量
     */
    public void init() throws ServletException {
        String rootPath = this.getServletContext().getRealPath("/");
        String log4jPath = this.getServletConfig().getInitParameter("elson.log4j.path");
        //若没有指定elson.log4j.path初始参数,则使用WEB的工程目录
        log4jPath = (log4jPath==null||"".equals(log4jPath))?rootPath:log4jPath;
        System.setProperty("elson.log4j.path", log4jPath);
        super.init();
    }
}

 

 

 

二、web.xml文件配置 
<servlet> 
<servlet-name>SystemServlet</servlet-name> 
<servlet-class>com.elson.util.SystemServlet</servlet-class> 
<init-param> 
<param-name>elson.log4j.path</param-name> 
<!--引自若未指定,则使用工程目录,若指定,使用指定目录--> 
<param-value></param-value> 
</init-param> 
<load-on-startup>0</load-on-startup> 
</servlet> 

三、log4j.properties文件配置(输出到工程目录下的logs子目录中) 
log4j.appender.FILEOUT = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.FILEOUT.File = ${elson.log4j.path}logs/log.html 
log4j.appender.FILEOUT.Append = true 
log4j.appender.FILEOUT.Threshold = DEBUG 
log4j.appender.FILEOUT.layout = org.apache.log4j.HTMLLayout

 

注意:上面的 load-on-startup 设为 0 ,以便在 Web 容器启动时即装入该 Servlet 。log4j.properties 文件放在根的properties子目录中,也可以把它放在其它目录中。应该把 .properties 文件集中存放,这样方便管理。

posted @ 2012-11-04 03:43  elson  阅读(437)  评论(0编辑  收藏  举报