log4j中配置日志文件相对路径方法

 

 

方法一: 用相对路径代替绝对路径

    主要是扩展了log4j的RollingFileAppender类,其他的FileAppender同样道理。扩展的方法,就是用一个子类去覆盖 setFile方法,这个方法在log4j读取配置文件生成appender的时候调用,传入的就是配置文件中的路径,这样我就可以按照自己的想法在路径 前面加上根路径了。这种方法可以在log4j.properties中用相对路径自由配置log4j.appender.A1.File属性来决定生成的 日志相对web应用根目录的位置。

举例:ZxmDailyRollingFileAppender.java

log4j.properties文件

log4j.appender.AFile=com.common.config.ZxmDailyRollingFileAppender
#log4j.appender.AFile=org.apache.log4j.DailyRollingFileAppender

public class ZxmDailyRollingFileAppender extends DailyRollingFileAppender {
 public void setFile(String filetype, boolean arg2, boolean arg3, int arg4) throws IOException {
  String path = getServletConfig().getServletContext().getRealPath("/logs/");
  String fuhao = File.separator;
  String filepath = path + fuhao + "log.html";
   super.setFile(filepath, arg2, arg3, arg4);
 }
}

 

方法二: 使用服务器环境变量

    是利用服务器vm中已经存在的环境变量如${catalina.home}或者${catalina.base}来设置相对 于${catalina.home}或者${catalina.base}的日志路径,日志只能放到服务器子目录里,而且如果是用的其它服务器,则要改对 应的环境变量。此方法平台移植不方便。

举例:log4j.appender.file.file=${catalina.base}/logs/psp_error.log

catalina.home指向公用信息的位置,就是bin和lib的父目录。
catalina.base指向每个Tomcat目录私有信息的位置,就是conf、logs、temp、webapps和work的父目录。
仅运行一个Tomcat实例时,这两个属性指向的位置是相同的。

-->>备注

使用服务器的环境变量,其实是使用tomcat和启动服务中设置的环境变量。

如果没有符合要求的,也可以自己设置,只不过这样的设置不太能通用(尤其是换了操作系统)

 

方法三: 通过servlet初始化init()方法中加载file属性实现相对路径

    是扩展ActionServlet类,覆盖其init()方法,新方法中载入log4j.properties位置的参数,可以自由配置log4j的配置文件的名字和存放位置。也可自由配置log4j日志文件的相对于当前应用的路径。

举例:

web.xml

 <!-- 系统初始化配置信息  servlet -->
 <servlet>
  <servlet-name>configServlet</servlet-name>
  <servlet-class>com.common.config.ConfigServlet</servlet-class>
  <init-param>
   <param-name>Log4jFile</param-name>
   <param-value>/WEB-INF/config/log4j.properties</param-value>
  </init-param>
  <init-param>
   <param-name>Log4jFileSavePath</param-name>
   <param-value>/logs</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>

ConfigServlet.java文件

public class ConfigServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 public void init(ServletConfig config) throws ServletException {
  super.init(config);
      //初始化log4j日志组件
  initLogConfig(config);
  
 }
 
 
 private void initLogConfig(ServletConfig config) { 
  String prifix = getServletContext().getRealPath("/");
    //System.out.println(prifix);
    
     //获取log4j配置文件地址
  String Log4jFile = config.getInitParameter("Log4jFile");
  //System.out.println(Log4jFile);
  String filePath = prifix + Log4jFile;
  //System.out.println(filePath);
  PropertyConfigurator.configure(filePath);
  Properties props = new Properties();
  try {
   String Log4jFileSavePath = config.getInitParameter("Log4jFileSavePath");
   //System.out.println(Log4jFileSavePath);
   FileInputStream log4jStream = new FileInputStream(filePath);
   props.load(log4jStream);
   log4jStream.close();
   //设置日志保存地址
   String logFile = prifix + Log4jFileSavePath + File.separator + "d1cm_log.html" ;
   //System.out.println(logFile);
   props.setProperty("log4j.appender.AFile.File", logFile);
   PropertyConfigurator.configure(props); //装入log4j配置信息
  } catch (IOException e) {
   e.printStackTrace();
  }
  System.err.println("初始化log4j日志组件");
 }
}

 

 

参考一篇好博文~

O

O

O

O

O

O

O

O

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值