如何在系统启动的时候加载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的配置文件的更多相关文章
-
SpringMvc 系统启动时加载数据到内存中
SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...
-
web.xml中配置启动时加载的servlet,load-on-starup
web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...
-
bash启动时加载配置文件过程
本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执 ...
-
使用web.xml方式加载Spring时,获取Spring context的两种方式
使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...
-
【Java Web开发学习】Spring加载外部properties配置文件
[Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...
-
web.xml组件加载顺序
在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要. 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前. 经过查阅和Debug发现, web.x ...
-
web.xml的加载过程配置详解
一:web.xml加载过程 简单说一下,web.xml的加载过程.当我们启动一个WEB项目容器时,容器包括(JBoss,Tomcat等).首先会去读取web.xml配置文件里的配置,当这一步骤没有 ...
-
interface21 - web - ContextLoaderListener(Spring Web Application Context加载流程)
前言 最近打算花点时间好好看看spring的源码,然而现在Spring的源码经过迭代的版本太多了,比较庞大,看起来比较累,所以准备从最初的版本(interface21)开始入手,仅用于学习,理解其设计 ...
-
web.xml文件加载顺序
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
随机推荐
-
Android 自定义RecyclerView 实现真正的Gallery效果
http://blog.csdn.net/lmj623565791/article/details/38173061
-
img图片放大控件 lightbox.js
1.引入相关js,css jquery-1.7.2.min.js,lightbox.css,lightbox.js 2 图片增加<a href="大图片地址" rel=& ...
-
javaZIP压缩文件
问题描述: java ZIP压缩文件 问题解决: 说明: 防止创建压缩文件中中文乱码,需要导入的包: (1)创建ZipOutputStream 注: 以上引用o ...
-
MySQL数据库主从复制实践
MySQL 主从(MySQL Replication),主要用于 MySQL 的实时备份.高可用HA.读写分离.在配置主从复制之前需要先准备 2 台 MySQL 服务器. 一.MySQL主从原 ...
-
SSM-SpringMVC-02:SpringMVC最简单的小案例
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 咱们这个案例做什么? 就是用处理器代替Servlet处理请求 开发步骤: 1.引入jar包 <!--单 ...
-
在java中,异常抛出点后程序的执行情况
1.在throw语句,即自定义的抛出异常语句后面的代码并不会执行,会提示错误,编译器并不可以正常编译. 2.若在一个条件语句中抛出一个异常,程序可以编译,但不会运行(dead code). 3.若在一 ...
-
zigbee_蓝牙_wifi的比较与区别分析
现在无线通读热了起来.三个最大的Wifi.ZigBee.蓝牙它们三个始终困惑着我.那么它们三个有什么区别呢? Zigbee 和蓝牙都是一项无线通信技术.ZigBee的传输距离视发射功率而定,有几百到几 ...
-
docker 拷贝镜像文件
1.概述 我们制作好镜像后,有时需要将镜像复制到另一台服务器使用. 能达到以上目的有两种方式,一种是上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所 ...
-
eclipse无法连接到makertplace
Eclipse需要安装一个Jcoco的插件,但是连接Eclipse Market的时候,总是出现如下的报错: Cannot open Eclipse Marketplace Cannot instal ...
-
vue 给 图片添加一个默认图片
<img v-bind:src="userData.photo" :onerror="logo" class="img-box4"&g ...