如何在系统启动的时候加载log4j的配置文件呢?

  1、自定义监听类并且继承“ServletContextListener”接口:

  

 package cn.ibeans.common;

 import java.io.File;
import java.util.List; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import cn.ibeans.common.util.FileUtil;
/**
*
* @author hezuoan
*
*/
public class ApplicationListener implements ServletContextListener { private static Logger log = Logger.getLogger(ApplicationListener.class);
@Override
public void contextInitialized(ServletContextEvent sce) { //获取log4j配置文件的地址
String log4jPath = ApplicationDispatchServlet.class.getResource("/").getPath() + "config/logs";
List<File> files = FileUtil.listFile(new File(log4jPath), "properties", false); if ((files == null) || (files.size() == 0)){
log.info("没有发现Log4j配置文件.");
return;
}
for (File file : files) {
//加载配置文件
PropertyConfigurator.configure(file.getPath());
}
log.info("加载Log4j配置文件完成.");
} @Override
public void contextDestroyed(ServletContextEvent sce) { } }

  上述代码中FileUtil.listFile() 方法是自己封装的工具类。

  /**
* 获取文件夹下的所有文件
* @param dir 文件夹路径
* @param filename 后缀名称
* @param recursive 是否递归该文件夹下的子文件夹
* @return
*/
public static List<File> listFile(File dir,final String filename, boolean recursive)
{
if (!dir.exists()) {
throw new IllegalArgumentException("目录:" + dir + "不存在");
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException(dir + "不是目录");
}
FileFilter ff = null;
if ((filename == null) || (filename.length() == 0)) {
ff = new FileFilter()
{
public boolean accept(File pathname)
{
return true;
}
};
} else {
ff = new FileFilter()
{
public boolean accept(File pathname)
{
if (pathname.isDirectory()) {
return true;
}
String name = pathname.getName();
if (name.indexOf(filename) != -1) {
return true;
}
return false;
}
};
}
return listFile(dir, ff, recursive);
} private static List<File> listFile(File dir, FileFilter ff, boolean recursive)
{
List<File> list = new ArrayList<File>();
File[] subs = dir.listFiles(ff);
if ((subs != null) && (subs.length > 0)) {
for (File sub : subs) {
if (sub.isFile()) {
list.add(sub);
} else if (recursive) {
list.addAll(listFile(sub, ff, true));
}
}
}
return list;
}

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

  

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

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

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

  1. SpringMvc 系统启动时加载数据到内存中

    SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...

  2. web.xml中配置启动时加载的servlet,load-on-starup

    web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...

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

    本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执 ...

  4. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

  5. 【Java Web开发学习】Spring加载外部properties配置文件

    [Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...

  6. web.xml组件加载顺序

    在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要. 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前. 经过查阅和Debug发现, web.x ...

  7. web.xml的加载过程配置详解

      一:web.xml加载过程 简单说一下,web.xml的加载过程.当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等).首先会去读取web.xml配置文件里的配置,当这一步骤没有 ...

  8. interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)

    前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...

  9. web.xml文件加载顺序

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

随机推荐

  1. mysql(或者mariadb)连接工具HeidiSQL

    Some infos around HeidiSQL Project website: http://www.heidisql.com/Google Code: http://code.google. ...

  2. 倒排索引压缩:改进的PForDelta算法

    由于倒排索引文件往往占用巨大的磁盘空间,我们自然想到对数据进行压缩.同时,引进压缩算法后,使得磁盘占用减少,操作系统在query processing过程中磁盘读取效率也能提升.另外,压缩算法不仅要考 ...

  3. [转]DOS特殊字符转义方法

    http://www.robvanderwoude.com/escapechars.php 期望得到的字符 转义后字符 说明 % %% May not always be required in do ...

  4. codepage IMLangCodePages

      http://baike.baidu.com/link?url=78DSTGAri8dvHNLQ03rThSKieJqhFwFWL4sQMao6cfaRSOUWN88QVBwmSJPCZch0vf ...

  5. 架构模式对象与关系结构模式之:标识域(Identity Field)

    一:标识域(Identity Field) 标识域(Identity Field)可以理解为主键.使用领域模型和行数据入口的时候,就要使用标识域,因为这两个对象代表的是唯一存在的那个数据记录.事务脚本 ...

  6. 【点滴javascript】变量与作用域

    基本类型与引用类型 ECMAScript的的变量有两种类型: 基本类型(值类型):简单数据段 引用类型:多个值构成的对象 在变量赋值结束后,解析器必须知道这个变量时基本数据类型还是引用类型,需要注意的 ...

  7. C++ Primer 快速入门

    <C++ Primer 4th> 读书摘要 必须有一个命名为 main.操作系统通过 main 函数返回的值来确定程序是否成功执行完毕.返回 0 值表明程序程序成功执行完毕.任何其他非零的 ...

  8. spring定时任务轮询(spring Task)

    定时任务轮询比如任务自服务器启动就开始运行,并且每隔5秒执行一次. 以下用spring注解配置定时任务.1.添加相应的schema xmlns:task=" xsi:schemaLocati ...

  9. iOS JSPatch 热修复使用

    概述 一说到热修复,可能很多人会觉得应该很复杂,很难用(我以前是这么觉得的...),实际使用起来蛮简单的,这里以一个小demo演示热修复是如何修复崩溃的,具体更深入的用法,可以看这个https://g ...

  10. Sublime Text 新建文件的模版插件: SublimeTmpl

    地址 安装方法 通过 Package ControlPackage Control / Install Package, 搜索"SublimeTmpl" 或 "tmpl& ...