zoukankan      html  css  js  c++  java
  • 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   }
    View Code

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

      

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

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

  • 相关阅读:
    面试java_后端面经_5
    头条后端面经_1面
    面试java后端面经_2
    java后端开发面经 数据库相关
    用友java后端开发面经
    面试java后端面经_4
    维恩贝特面试JAVA后台开发
    面试java后端面经_3
    世纪龙校招java开发一、二面 面经
    AndroidWebView使用
  • 原文地址:https://www.cnblogs.com/jbelial/p/3962768.html
Copyright © 2011-2022 走看看