将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 文件集中存放,这样方便管理。