`

运行时切换Log4j日志策略

阅读更多
要实现运行时切换日志策略,需要使用log4j中的
DOMConfigurator.configureAndWatch(location, refreshInterval) 或
PropertyConfigurator.configureAndWatch(location, refreshInterval)
location就是log4j配置文件的位置定位,refreshInterval是一个long型值,表示多少毫秒后重新加载配置文件。

spring通过org.springframework.util.Log4jConfigurer实现运行时切换需求,Log4jConfigurer正是对上述方法进行了封装。默认情况是1分钟重新加载一次。

log4j对配置文件变化的监视类是: org.apache.log4j.helpers.FileWatchdog
package org.apache.log4j.helpers;   
      import java.io.File;
      import org.apache.log4j.helpers.LogLog;
      

      public abstract class FileWatchdog extends Thread {
     
      public static final long DEFAULT_DELAY = 60000; 
      protected String filename;
      protected long delay = DEFAULT_DELAY; 
       
        File file;
       long lastModif = 0; 
        boolean warnedAlready = false;
        boolean interrupted = false;
      
 protected FileWatchdog(String filename) {
        this.filename = filename;
        file = new File(filename);
          setDaemon(true);
         checkAndConfigure();
        }
     
 public void setDelay(long delay) {
          this.delay = delay;
        }
 abstract  protected void doOnChange();
 protected void checkAndConfigure() {
          boolean fileExists;
          try {
            fileExists = file.exists();
          } catch(SecurityException  e) {
            LogLog.warn("Was not allowed to read check file existance, file:["+
      		  filename+"].");
            interrupted = true; // there is no point in continuing
            return;
          }
      
          if(fileExists) {
            long l = file.lastModified(); // this can also throw a SecurityException
            if(l > lastModif) {           // however, if we reached this point this
      	lastModif = l;              // is very unlikely.
      	doOnChange();
      	warnedAlready = false;
            }
          } else {
            if(!warnedAlready) {
      	LogLog.debug("["+filename+"] does not exist.");
      	warnedAlready = true;
            }
          }
        }
      
       public
       void run() {    
         while(!interrupted) {
           try {
     	    Thread.sleep(delay);
           } catch(InterruptedException e) {
     	// no interruption expected
           }
           checkAndConfigure();
         }
       }
   }

分享到:
评论

相关推荐

    Log4j日志配置说明,Log4j日志配置说明

    Log4j日志配置说明,Log4j日志配置说明Log4j日志配置说明,Log4j日志配置说明

    tomcat6.0 配log4j日志的必须文件及配置过程

    tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...

    log4j日志管理

    log4j日志管理log4j日志管理log4j日志管理log4j日志管理log4j日志管理

    logstash 采集log4j日志配置文件

    logstash采集log4j日志发送到es配置文件,可以把日志根据日志级别区分开,一个级别一条日志是es中的一条数据

    Log4j日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    log4j.CustomLogAppender 限制log4j文件保存天数

    每天生成一个log4j日志文件,如果只需要将最近一段时间内的日志文件保留,以前或更早的文件不用保留。例如只保留最近一周的日志,日志文件保留3天等等这些。。。通过这个jar包就可以实现。 log4j.properties文件在...

    tomcat下的log4j日志配置

    tomcat下的log4j日志配置,给tomcat配置log4j有好几种方法,我知道的有: 一、tomcat级别的统一日志管理 二、每个webapp分别配置log4j

    tomcat8更换log4j记录日志

    本包适用于tomcat8及以下版本 附带log4j.properties 和 配置说明

    log4j按功能保存日志

    log4j按功能保存日志

    log4j日志驱动包

    Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....

    使用log4j2实现日志数据脱敏

    使用log4j2实现日志数据脱敏

    log4j日志框架

    log4j日志框架 log4j日志框架 log4j日志框架log4j日志框架

    log4j 日志服务器

    log4j 日志服务器 一个系统可能有多个子系统组成,这些子系统都有自己的日志,并且运行在不同的操作系统和主机上,收集这些日志对运营人员来说也比较困难。 因此决定在平台中采用日志服务器来做到集中日志管理,平台...

    log4j日志配置以及配置文件详解

    log4j配置文件以及配置文件说明 包里有一个log4j配置文件 和一个配置详解

    log4j日志包日志包

    log4j驱动包,里面包含log4j.properties日志文件xml

    log4j自定义日志文件名及日志输出格式

    根据项目需要,要求日志文件名及输出的日志内容头为特殊的格式,因此重写了log4j的一些方法,如要求的格式和项目不同,可根据示例参考进行再次的修改

    log4J日志.zip

    log4j日志jar包及配置文件

    Log4j日志管理系统简单使用说明

    Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和...

    log4j 根据日期和文件大小切分日志

    由公司的项目需要根据日期和文件大小切分log4j日志,所以实现来该appender。本人测试通过,并且在公司的其它项目中已有线上使用,暂时还没发现问题。本人代码有写得不好或者错误的地方,欢迎大家指正,谢谢!!!

    log4j日志报错解决办法

    提示:log4j:WARN Please initialize the log4j system properly,log4j:WARN No appenders could be found for logger错误的处理办法

Global site tag (gtag.js) - Google Analytics