WEB系统启动时加载Log4j的配置文件

  如何在系统启动的时候加载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() 方法是自己封装的工具类。

 1  /**
 2    * 获取文件夹下的所有文件
 3    * @param dir    文件夹路径
 4    * @param filename 后缀名称
 5    * @param recursive 是否递归该文件夹下的子文件夹
 6    * @return
 7    */
 8   public static List<File> listFile(File dir,final String filename, boolean recursive)
 9   {
10     if (!dir.exists()) {
11       throw new IllegalArgumentException("目录:" + dir + "不存在");
12     }
13     if (!dir.isDirectory()) {
14       throw new IllegalArgumentException(dir + "不是目录");
15     }
16     FileFilter ff = null;
17     if ((filename == null) || (filename.length() == 0)) {
18       ff = new FileFilter()
19       {
20         public boolean accept(File pathname)
21         {
22           return true;
23         }
24       };
25     } else {
26       ff = new FileFilter()
27       {
28         public boolean accept(File pathname)
29         {
30           if (pathname.isDirectory()) {
31             return true;
32           }
33           String name = pathname.getName();
34           if (name.indexOf(filename) != -1) {
35             return true;
36           }
37           return false;
38         }
39       };
40     }
41     return listFile(dir, ff, recursive);
42   }
43
44   private static List<File> listFile(File dir, FileFilter ff, boolean recursive)
45   {
46     List<File> list = new ArrayList<File>();
47     File[] subs = dir.listFiles(ff);
48     if ((subs != null) && (subs.length > 0)) {
49       for (File sub : subs) {
50         if (sub.isFile()) {
51           list.add(sub);
52         } else if (recursive) {
53           list.addAll(listFile(sub, ff, true));
54         }
55       }
56     }
57     return list;
58   }

 2、在Web.xml 添加该监听器的配置:

  

   <listener>
         <listener-class>cn.ibeans.common.ApplicationListener</listener-class>
     </listener> 

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

时间: 2024-08-01 11:07:46

WEB系统启动时加载Log4j的配置文件的相关文章

java web 项目如何加载log4j配置文件

在整个WEB系统中,为了统一的使用日志管理,需要在系统启动的时候就加载Log4j的配置文件,这样才能保证以后使用log4j的格式是一致的,便于跟踪和解决问题. 那么,如何在系统启动的时候加载log4j的配置文件呢?下面我简单的介绍一下: 1.在web.xml文件中添加一个"监听器" Xml代码 <!-- 加载log4j的配置信息 --> <listener> <listener-class>hb.init.log4j.Log4jInit</li

Tomcat(一):Tomcat启动时加载web.xml

server.xml配置文件样例: <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional inf

bash启动时加载配置文件过程

本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令.这些行为都算是启动bash时的过程. 另外,有些时候登录系统是可以交互的(如正常登录系统),有些时候是无交互的(如执行一个脚本),因此总的来说bash启动类型可分为交互式shell和非交互式shell.更细分一层,交互式shell还分为交互式的登录shell和交互式非登录shel

web.xml 组件加载顺序

<web-app> <display-name></display-name>WEB应用的名字 <description></description> WEB应用的描述 <context-param></context-param> context-param元素声明应用范围内的初始化参数 <!– 指定spring配置文件位置 –> <context-param> <param-name>

java web项目启动加载顺序

web.xml加载过程(步骤):       1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将<context-param></context-param>转

web.xml 的加载过程

初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext. 容器创建<listener></listener>中的类实例,即创建监听(备注:listene

tomcat web.xml启动加载类

tomcat web.xml启动加载类 2010-03-30 22:31suitieming | 分类:JAVA相关 | 浏览3870次 我写了一个程序配在tomcat上 想启动tomcat的时候自动运行这个类 怎么配置XML文件类名Test 分享到: 2010-03-31 01:57提问者采纳 答题闯关,过关即送礼!快来参加~ 把你需要启动时自动运行的类做成一个Servlet,然后在web.xml做如下配置:  <servlet>   <servlet-name>StartupL

如何在tomcat启动时加载一个类

Tomcat启动时classloader加载顺序 Tomcat的class加载的优先顺序一览   1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件.   2.环境变量CLASSPATH中的jar和class文件.   3.$CATALINA_HOME/common/classes下的class文件.   4.$CATALINA_HOME/commons/endorsed下的jar文件.   5.$CATALINA_HOME/commons/i18n下的jar文件.   6.

Servlet在启动时加载的tomcat源码(原创)

tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MAX_VALUE. Jsp Servlet的类是org.apache.jasper.servlet.JspServlet. Jsp Servlet是强制性启动时加载,其loadOnStartup的默认值,或其值是失效值时,将使用最大有效值. 通过配置Context或Host的failCtxIfServ