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