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 [EMAIL PROTECTED] #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 <[EMAIL PROTECTED]> + * @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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]