void

log4j中使用相对路径

很多朋友想把日志写在web应用当中,下面来介绍一下:
log4j.properties文件配置如下:


 1log4j.rootLogger=ERROR,CONSOLE,A1   
 2log4j.addivity.org.apache=true   
 3  
 4log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender   
 5log4j.appender.A1.File=${webappHome}/WEB-INF/logs/website.log   
 6log4j.appender.A1.Encoding=GBK   
 7log4j.appender.A1.Threshold=DEBUG   
 8log4j.appender.A1.DatePattern='.'yyyy-MM-dd   
 9log4j.appender.A1.layout=org.apache.log4j.PatternLayout   
10log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n 

这里,我们使用${webappHome}来取得应用路径,webappHome是个变量。我们是从哪里取得的值呢?是从我们自己的类中,因此必须写这个类。很简单:

 1package com.clientmanager.util;   
 2  
 3import javax.servlet.ServletConfig;   
 4import javax.servlet.ServletException;   
 5import javax.servlet.http.HttpServlet;   
 6  
 7import org.apache.log4j.PropertyConfigurator;   
 8  
 9  
10public class Log4jInit extends HttpServlet {      
11       
12       
13    public void init(ServletConfig config) throws ServletException {   
14        String prefix = config.getServletContext().getRealPath("/"); //获取当前路径   
15        String file = config.getInitParameter("log4j");//从web.xml中获取参数值,找到log4j这个文件   
16        System.setProperty("webappHome", prefix); //log4j.properties文件中的变量是在这里设置的   
17        if (file != null{    
18            PropertyConfigurator.configure(prefix + file);    
19        }
   
20    }
   
21}
  

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

1<servlet>      
2 <servlet-name>log4j-init</servlet-name>    
3   <servlet-class>com.clientmanager.util.Log4jInit</servlet-class>     
4     <init-param>       
5       <param-name>log4j</param-name>     
6     <param-value>WEB-INF/classes/log4j.properties</param-value>       
7    </init-param>      
8    <load-on-startup>0</load-on-startup>    
9</servlet>

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

posted on 2009-06-05 19:24 void 阅读(438) 评论(0)  编辑  收藏 所属分类: Log4j


只有注册用户登录后才能发表评论。


网站导航: