You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by mw...@apache.org on 2006/01/18 05:50:31 UTC

svn commit: r370049 - in /logging/log4j/trunk/src/java/org/apache/log4j: helpers/FileWatchdog.java watchdog/FileWatchdog.java watchdog/TimedLocationWatchdog.java watchdog/TimedURLWatchdog.java

Author: mwomack
Date: Tue Jan 17 20:50:29 2006
New Revision: 370049

URL: http://svn.apache.org/viewcvs?rev=370049&view=rev
Log:
Updates for file watchdog

Added:
    logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java   (with props)
Removed:
    logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedURLWatchdog.java
Modified:
    logging/log4j/trunk/src/java/org/apache/log4j/helpers/FileWatchdog.java
    logging/log4j/trunk/src/java/org/apache/log4j/watchdog/FileWatchdog.java

Modified: logging/log4j/trunk/src/java/org/apache/log4j/helpers/FileWatchdog.java
URL: http://svn.apache.org/viewcvs/logging/log4j/trunk/src/java/org/apache/log4j/helpers/FileWatchdog.java?rev=370049&r1=370048&r2=370049&view=diff
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/helpers/FileWatchdog.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/helpers/FileWatchdog.java Tue Jan 17 20:50:29 2006
@@ -27,9 +27,13 @@
    Check every now and then that a certain file has not changed. If it
    has, then call the {@link #doOnChange} method.
 
-
+   This class has been deprecated and is no longer used by either
+   PropertyConfigurator or DOMConfigurator.
+   
    @author Ceki Gülcü
-   @since version 0.9.1 */
+   @since version 0.9.1
+   @deprecated Use org.apache.log4j.watchdog.FileWatchdog instead.
+*/
 public abstract class FileWatchdog extends Thread {
   /**
      The default delay between every file modification check, set to 60

Modified: logging/log4j/trunk/src/java/org/apache/log4j/watchdog/FileWatchdog.java
URL: http://svn.apache.org/viewcvs/logging/log4j/trunk/src/java/org/apache/log4j/watchdog/FileWatchdog.java?rev=370049&r1=370048&r2=370049&view=diff
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/watchdog/FileWatchdog.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/watchdog/FileWatchdog.java Tue Jan 17 20:50:29 2006
@@ -17,37 +17,75 @@
 package org.apache.log4j.watchdog;
 
 import java.io.File;
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 
 /**
  * Implements a watchdog to watch a file.  When the file changes, determined by
  * a change in the file's modification date, the contents of the file are use to
  * reconfigure the log4j environment.
  */
-public class FileWatchdog extends TimedURLWatchdog {
+public class FileWatchdog extends TimedLocationWatchdog {
+
+  private String filePath;
 
   /** The file being watched. */
   private File watchedFile;
-  
+
+  /**
+   * Sets the path of the file to use and watch for configuration changes.
+   *
+   * @param filePath
+   */
+  public void setFile(String filePath) {
+    this.filePath = filePath;
+  }
+
+  /**
+   * Returns the path of the file being watched for confirguration changes.
+   *
+   * @return the path of the file being watched
+   */
+  public String getFile() {
+    return filePath;
+  }
   /**
    * Sets up the reference to the file being watched, then calls the version
    * in the super class.
    */
   public void activateOptions() {
 
-    if (watchedURL == null) {
-      getLogger().error("watchdog \"{}\" not configured with URL to watch",
+    if (filePath == null) {
+      getLogger().error("watchdog \"{}\" not configured with path to watch",
         this.getName());
       return;
     }
 
-    watchedFile = new File(watchedURL.getFile());
+    watchedFile = new File(filePath);
     super.activateOptions();
   }
-  
+
   /**
+   * Returns the modification of the file being watched.
+   * 
    * @return The modification time of the file.
    */
   public long getModificationTime() {
     return watchedFile.lastModified();
+  }
+
+  /**
+   * Reconfigures the log4j environment using the file as the source of the
+   * configuration data.
+   */
+  public void reconfigure() {
+    try {
+      reconfigureByInputStream(new BufferedInputStream(
+        new FileInputStream(watchedFile)));
+    } catch (FileNotFoundException e) {
+        this.getLogger().error("{} watchdog cannot find file {}",
+          this.getName(), watchedFile.getName());
+    }
   }
 }

Added: logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java
URL: http://svn.apache.org/viewcvs/logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java?rev=370049&view=auto
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java (added)
+++ logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java Tue Jan 17 20:50:29 2006
@@ -0,0 +1,109 @@
+package org.apache.log4j.watchdog;
+
+import org.apache.log4j.scheduler.Job;
+import org.apache.log4j.spi.LoggerRepository;
+import org.apache.log4j.spi.LoggerRepositoryEx;
+
+/**
+ * Implements functionality of a watchdog that periodically checks a location
+ * for updated configuration data.
+ *
+ * This class can be used as the base class for any Watchdog that needs to
+ * watch a single location (File or URL) for changes.  Subclasses must implement
+ * the getModificationTime method to return the current modification time of the
+ * watched source, since this can be source specific.  When a change in
+ * modification time is detected, the log4j environment will be reconfigured,
+ * using the location as the source for the new configuration data.  Subclasses
+ * must implement the reconfigure method to use the specific source for
+ * reconfiguration.
+ *
+ * The location will be checked peridoically.  This period of time is defined
+ * by the <code>interval</code> property.
+ *
+ * @author Mark Womack <mw...@apache.org>
+ * @since 1.3
+ */
+public abstract class TimedLocationWatchdog  extends WatchdogSkeleton
+    implements Job {
+
+  /** Default interval of time between checks, in milliseconds. */
+  public static long DEFAULT_INTERVAL = 60000;
+
+  /** The interval of time between checks. */
+  protected long interval = DEFAULT_INTERVAL;
+
+  /** The last time the location was modified. */
+  private long lastModTime = -1;
+
+  /**
+   * Sets the interval of time, in milliseconds, between checks on the
+   * location.
+   *
+   * @param interval An interval of time, in milliseconds.
+   */
+  public void setInterval(long interval) {
+    this.interval = interval;
+  }
+
+  /**
+   * Returns the interval of time, in milliseconds, between checks on the
+   * location.
+   *
+   * @return An interval of time, in milliseconds.
+   */
+  public long getInterval() {
+    return interval;
+  }
+
+  /**
+   * Returns the current modification time for the watched location.  Subclasses
+   * must implement specifically for the type of source they are watching.
+   *
+   * @return The current modification time of the location.
+   */
+  public abstract long getModificationTime();
+
+  /**
+   * Implements the Job interface for the Scheduler.  When this method is called
+   * by the Scheduler it checks the current modification time of the watched
+   * source with the last recorded modification time.  If the modification times
+   * are different, then the log4j environment is reconfigured using the
+   * watched source for the configuration data.
+   */
+  public void execute() {
+    long newModTime = getModificationTime();
+
+    if (lastModTime != newModTime) {
+      reconfigure();
+      lastModTime = newModTime;
+    }
+  }
+
+  /**
+   * Called to activate the watchdog and start the watching of the source.
+   */
+  public void activateOptions() {
+    // get the current modification time of the watched source
+    lastModTime = getModificationTime();
+
+    LoggerRepository repo = getLoggerRepository();
+    if (repo instanceof LoggerRepositoryEx) {
+        ((LoggerRepositoryEx) repo).getScheduler().schedule(this,
+      System.currentTimeMillis() + interval, interval);
+    } else {
+        this.getLogger().error("{} watchdog requires repository that supports LoggerRepositoryEx",
+          this.getName());
+    }
+  }
+
+  /**
+   * Shutdown this watchdog.  Since implemented as a scheduled Job, this method
+   * simply removes the watchdog from the Scheduler.
+   */
+  public void shutdown() {
+    LoggerRepository repo = getLoggerRepository();
+    if (repo instanceof LoggerRepositoryEx) {
+        ((LoggerRepositoryEx) repo).getScheduler().delete(this);
+    }
+  }
+}

Propchange: logging/log4j/trunk/src/java/org/apache/log4j/watchdog/TimedLocationWatchdog.java
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org