log4j 配置文件什么时候被加载

如题所述

第1个回答  2016-08-17
  在系统启动的时候加载log4j的配置文件
  1、自定义监听类并且继承“ServletContextListener”接口:
  

  1 package cn.ibeans.common;
2
3 import java.io.File;
4 import java.util.List;
5
6 import javax.servlet.ServletContextEvent;
7 import javax.servlet.ServletContextListener;
8
9 import org.apache.log4j.Logger;
10 import org.apache.log4j.PropertyConfigurator;
11 import cn.ibeans.common.util.FileUtil;
12 /**
13 *
14 * @author hezuoan
15 *
16 */
17 public class ApplicationListener implements ServletContextListener {
18
19 private static Logger log = Logger.getLogger(ApplicationListener.class);
20 @Override
21 public void contextInitialized(ServletContextEvent sce) {
22
23 //获取log4j配置文件的地址
24 String log4jPath = ApplicationDispatchServlet.class.getResource("/").getPath() + "config/logs";
25 List<File> files = FileUtil.listFile(new File(log4jPath), "properties", false);
26
27 if ((files == null) || (files.size() == 0)){
28 log.info("没有发现Log4j配置文件.");
29 return;
30 }
31 for (File file : files) {
32 //加载配置文件
33 PropertyConfigurator.configure(file.getPath());
34 }
35 log.info("加载Log4j配置文件完成.");
36 }
37
38 @Override
39 public void contextDestroyed(ServletContextEvent sce) { }
40
41 }

  上述代码中FileUtil.listFile() 方法是自己封装的工具类。
  View Code
  2、在Web.xml 添加该监听器的配置:
  
  <listener>
<listener-class>cn.ibeans.common.ApplicationListener</listener-class>
</listener>

  
  加载log4j的配置文件的目的是为了使日志文件“放在跟工程相对路径的地方”,这样即使将项目移植到不同的操作系统上面,显示也是正常的。
相似回答
大家正在搜