服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了

服务器监控狗 log4j FileWatchdog 临控环境变化 方便多了

 

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

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   /**使用log4j的监控狗 */
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    public class IPAccessFileWatchdog extends FileWatchdog {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了        public IPAccessFileWatchdog(String filename){
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            super(filename);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了        }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了        public void doOnChange() {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            List<String> list = IPAccessController.this.loadIPRule(new File(this.filename));
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            if (list != null{
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了                IPAccessController.this.ipRule = list.toArray(new String[list.size()]);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            }
 else {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了                IPAccessController.this.ipRule = null;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了            LogLog.warn("ip access config load completed from file:" + filename);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了        }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了}



服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了FileWatchdog的代码也很简单,其实就是起一个线程,每隔固定的时间扫描一次监控的文件.我把代码也贴出来:'
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了// Contributors:  Mathias Bogaert
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了package org.apache.log4j.helpers;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了import java.io.File;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了import org.apache.log4j.helpers.LogLog;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了public abstract class FileWatchdog extends Thread {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  static final public long DEFAULT_DELAY = 60000; 
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  protected String filename;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  protected long delay = DEFAULT_DELAY; 
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  File file;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  long lastModif = 0; 
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  boolean warnedAlready = false;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  boolean interrupted = false;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  protected
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  FileWatchdog(String filename) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   this.filename = filename;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   file = new File(filename);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   setDaemon(true);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   checkAndConfigure();
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  public
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  void setDelay(long delay) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   this.delay = delay;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  abstract 
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  protected 
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  void doOnChange();
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  protected
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  void checkAndConfigure() {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   boolean fileExists;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   try {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    fileExists = file.exists();
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   }
 catch(SecurityException  e) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    LogLog.warn("Was not allowed to read check file existance, file:["+
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了 filename+"].");
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    interrupted = true// there is no point in continuing
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
    return;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   if(fileExists) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    long l = file.lastModified(); // this can also throw a SecurityException
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
    if(l > lastModif) {      // however, if we reached this point this
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
lastModif = l;        // is very unlikely.
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
doOnChange();
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了warnedAlready = false;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   }
 else {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    if(!warnedAlready) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了LogLog.debug("["+filename+"] does not exist.");
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了warnedAlready = true;
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  public
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  void run() {   
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   while(!interrupted) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    try {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  Thread.sleep(delay);
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    }
 catch(InterruptedException e) {
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了// no interruption expected
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了
    }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了    checkAndConfigure();
服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了   }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了  }

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了}

服务器监控狗 log4j FileWatchdog 临控环境变更 方便多了

本文来源于:http://www.blogjava.net/hello-yun/archive/2012/02/17/370186.html