欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

log4j中使用相对路径

程序员文章站 2022-05-09 22:58:15
...
很多朋友想把日志写在web应用当中,下面来介绍一下:
[b][color=blue]log4j.properties[/color][/b]文件配置如下:

log4j.rootLogger=ERROR,CONSOLE,A1
log4j.addivity.org.apache=true

log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=${webappHome}/WEB-INF/logs/website.log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n

这里,我们使用[b][color=blue]${webappHome}[/color][/b]来取得应用路径,[color=blue]webappHome[/color]是个变量。我们是从哪里取得的值呢?是从我们自己的类中,因此必须写这个类。很简单:
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("/"); //获取当前路径
String file = config.getInitParameter("log4j");//从web.xml中获取参数值,找到log4j这个文件
System.setProperty("webappHome", prefix); //log4j.properties文件中的变量是在这里设置的
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
}

好了,有了这个类,下一步是要在服务器启动时来初始化这个类。所以要在web.xml中进行配置
web.xml

<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>

最后说一点,如果你用[color=blue][b]struts[/b],[/color]而在[b][color=blue]web.xml[/color][/b]中配置了[b][color=blue]ServletAction[/color][/b],它的启动级别为[color=blue][b]<load-onstartup>0</load-on-startup>[/b][/color],那么我们的这个类的的启动级别不能低于它,否则可能会出现找不到路径的问题