log4j相对路径

本文介绍了两种在Java Web项目中配置Log4j的方法。一种是通过在src目录下创建log4j.properties文件并结合自定义Servlet进行路径配置;另一种是调整配置文件路径并在Servlet中动态读取和设置。这两种方法均能实现日志的有效记录。

方法一:

在工程src目录下建立一个log4j.properties文件,该文件会自动拷贝到/WEB-INF/classes下,文件内容如下:

### set log levels ###
log4j.rootLogger 
= debug, stdout, D, E


### 输出到控制台 ###
log4j.appender.stdout 
= org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target 
= System.out
log4j.appender.stdout.layout 
= org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern 
= %d{ABSOLUTE} %5p %c:%L - %m%n


### 输出到日志文件 ###
log4j.appender.D 
= org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File 
= ${WORKDIR}/logs/log.log
log4j.appender.D.Append 
= true
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold 
= DEBUG
log4j.appender.D.layout 
= org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern 
= %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n


### 保存异常信息到单独文件 ###
log4j.appender.E 
= org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File 
= ${WORKDIR}/logs/error.log
log4j.appender.E.Append 
= true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold 
= ERROR 
log4j.appender.E.layout 
= org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern 
= %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n



然后写一个初始化启动的Servlet,代码如下:

package servlets;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class Log4jInit extends HttpServlet {

 
private static final long serialVersionUID = -5543643811008717484L;

 
public Log4jInit() {
  
super();
 }

 
public void destroy() {
  
super.destroy(); 
 }

 
public void init() throws ServletException {
  
// 获得工作目录,修改log4j文件的保存路径
  String path = this.getServletContext().getRealPath("");
  System.out.println(path);
  System.setProperty(
"WORKDIR", path);
  
  
super.init();
 }
}


web.xml配置如下:

  <servlet>
    
<description>This is the description of my J2EE component</description>
    
<display-name>This is the display name of my J2EE component</display-name>
    
<servlet-name>Log4jInit</servlet-name>
    
<servlet-class>servlets.Log4jInit</servlet-class>
    
<init-param>   
    
<param-name>log4j</param-name>   
      
<param-value>WEB-INF/classes/log4j.properties</param-value>
    
</init-param>
    
<load-on-startup>1</load-on-startup>
  
</servlet>

 

这样就可以在代码中直接使用了
<%@ page import="org.apache.log4j.Logger;"%>
<%
  Logger log = Logger.getLogger(this.getClass());
  log.info("记录信息");
  log.debug( " debug " );
  log.error( " error " );
%>


方法二:
去掉方法一中配置文件log4j.properties中的${WORKDIR}/
然后修改Log4jInit的init方法如下:

public void init() throws ServletException {
 String prefix 
= getServletContext().getRealPath("/");   
    String file 
= getInitParameter("log4j");   
    String filePath 
= prefix + file;   
    Properties props 
= new Properties();   
    
try {   
     FileInputStream istream 
= new FileInputStream(filePath);   
     props.load(istream);   
        istream.close();   
        toPrint(props.getProperty(
"log4j.appender.file.File"));   
        
//设置路径
        String logFile = prefix + props.getProperty("log4j.appender.D.File");   
        props.setProperty(
"log4j.appender.D.File",logFile); 
        
//设置路径
        logFile = prefix + props.getProperty("log4j.appender.E.File");   
        props.setProperty(
"log4j.appender.E.File",logFile);
        
// 装入log4j配置信息
        PropertyConfigurator.configure(props);   
    } 
catch (IOException e) {   
        toPrint(
"Could not read configuration file [" + filePath + "].");   
        toPrint(
"Ignoring configuration file [" + filePath + "].");   
        
return;   
    }
    
super.init();
}  

public static void toPrint(String content) {   
 System.out.println(content);   

转载于:https://www.cnblogs.com/angushine/archive/2009/03/21/1418664.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值