`

服务器监控狗 log4j FileWatchdog

 
阅读更多

用java写服务程序时经常会涉及到监控某些配置文件,当配置文件发生变化时实时重新加载该文件的内容到内存.
实际上log4j里有现成的类FileWatchdog做了类似的工作.我们只需继承它,然后重写它的一些方法就可以了.
 

   /**使用log4j的监控狗 */
    
public class IPAccessFileWatchdog extends FileWatchdog {
        
public IPAccessFileWatchdog(String filename){
            
super(filename);
        }


        
public void doOnChange() {
            List
<String> list = IPAccessController.this.loadIPRule(new File(this.filename));
            
if (list != null{
                IPAccessController.
this.ipRule = list.toArray(new String[list.size()]);
            }
 else {
                IPAccessController.
this.ipRule = null;
            }

            LogLog.warn(
"ip access config load completed from file:" + filename);
        }

    }

}



FileWatchdog的代码也很简单,其实就是起一个线程,每隔固定的时间扫描一次监控的文件.我把代码也贴出来:'


// Contributors:  Mathias Bogaert

package org.apache.log4j.helpers;

import java.io.File;
import org.apache.log4j.helpers.LogLog;

public abstract class FileWatchdog extends Thread {

  
  
static final public 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();
   }

  }

}

分享到:
评论

相关推荐

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    log4j.jar各个版本

    apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    log4j-core-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....

    log4j中配置日志文件相对路径方法分析

    log4j的配置文件支持服务器的vm的环境变量,格式类似${catalina.home} log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log log4j.appender.R....

    log4j-api-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-...

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    老生常谈Log4j和Log4j2的区别(推荐)

    下面小编就为大家带来老生常谈Log4j和Log4j2的区别(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Log4j2简介及与Log4j效率对比

    描述Log4j2的配置详情及相对Log4j的优点,包括效率测试程序

    Log4j日志包

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

    log4j-api-2.12.4.ja和log4j-core-2.12.4.jar

    log4j-api-2.12.4.jar和log4j-core-2.12.4.jar,该版本避免log4j漏洞问题。

    修复log4j漏洞log4j2下载最新log4j2.16.0下载 log4j-api-2.16.0.jar

    apache下载太慢,特搬到国内下载。修复log4j漏洞log4j2下载最新log4j2.16.0下载

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,

    log4j-API-最新稳定版本log4j-1.2.17

    log4j-API-最新稳定版本log4j-1.2.17 apache log4j-API-最新稳定版本log4j-1.2.17

    log4j-api-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-api-2.12.1.jar; 赠送原API文档:log4j-api-2.12.1-javadoc.jar; 赠送源代码:log4j-api-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-api-2.12.1.pom; 包含翻译后的API文档:log4j-api-...

    Log4j2学习log4j2.xml配置模板

    Log4j2学习笔记,引入log4j2的依赖-log4j2.xml配置模板-application.properties文件配置-使用

    apache-log4j-2.0

    Apache Log4j 2.0 发布第 4 个 Beta 版本,包括的新特性有: o Added Log4j 2 to SLF4J adapter. o LOG4J2-131: Add SMTPAppender. Thanks to Scott Severtson. o Added hostName and contextName to property ...

    log4j-slf4j-impl-2.12.1-API文档-中英对照版.zip

    赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...

    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-所需jar包+配置详解(详细)

    关于配置文件的名称以及在项目中的存放位置  log4j 2.x版本不再支持像1.x中的....如果本地要测试,可以把log4j2-test.xml放到classpath,而正式环境使用log4j2.xml,则在打包部署的时候不要打包log4j2-test.xml即可。

Global site tag (gtag.js) - Google Analytics