User: user57
Date: 02/03/04 16:38:58
Modified: src/main/org/jboss/logging Log4jService.java
Log:
o Log4j can now be configured/reconfigured from a URL
Revision Changes Path
1.2 +62 -14 jboss-system/src/main/org/jboss/logging/Log4jService.java
Index: Log4jService.java
===================================================================
RCS file: /cvsroot/jboss/jboss-system/src/main/org/jboss/logging/Log4jService.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Log4jService.java 24 Feb 2002 10:16:53 -0000 1.1
+++ Log4jService.java 5 Mar 2002 00:38:58 -0000 1.2
@@ -12,7 +12,10 @@
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.net.URL;
-import java.util.ArrayList;
+import java.net.URLConnection;
+
+import java.util.Timer;
+import java.util.TimerTask;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
@@ -25,6 +28,7 @@
import org.jboss.util.ThrowableHandler;
import org.jboss.util.ThrowableListener;
+import org.jboss.util.NullArgumentException;
import org.jboss.logging.util.CategoryStream;
@@ -39,7 +43,7 @@
* <p>Installs CategoryStream adapters for System.out and System.err
* to catch and redirect calls to Log4j.
*
- * @version <tt>$Revision: 1.1 $</tt>
+ * @version <tt>$Revision: 1.2 $</tt>
* @author <a href="mailto:[EMAIL PROTECTED]">Fulco Muriglio</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Scott Stark</a>
* @author <a href="mailto:[EMAIL PROTECTED]">David Jencks</a>
@@ -95,6 +99,9 @@
/** The previous value of System.err. */
private PrintStream err;
+ /** The URL watch timer (in daemon mode). */
+ private Timer timer = new Timer(true);
+
// Constructors --------------------------------------------------
public Log4jService()
@@ -161,20 +168,12 @@
throw new FileNotFoundException
("Failed to find logj4 configuration: " + configurationPath);
}
+
log.debug("Configuration URL: " + url);
- // configurationPath is a file path
- String path = url.getFile();
- boolean isXML = configurationPath.endsWith(".xml");
- log.debug("isXML: " + isXML);
- if (isXML)
- {
- DOMConfigurator.configureAndWatch(path, 1000 * refreshPeriod);
- }
- else
- {
- PropertyConfigurator.configureAndWatch(path, 1000 * refreshPeriod);
- }
+ URLWatchTimerTask timerTask = new URLWatchTimerTask(url);
+ timerTask.run();
+ timer.schedule(timerTask, 1000 * refreshPeriod, 1000 * refreshPeriod);
// Make sure Category has loaded
Category category = Category.getRoot();
@@ -286,6 +285,55 @@
// these could be red-herrings, so log them as trace
log.trace("unhandled throwable, status is unknown", t);
break;
+ }
+ }
+ }
+
+ /**
+ * A timer task to check when a URL changes (based on
+ * last modified time) and reconfigure Log4j.
+ */
+ private class URLWatchTimerTask
+ extends TimerTask
+ {
+ private Category log = Category.getInstance(URLWatchTimerTask.class);
+
+ private long lastConfigured;
+ private URL url;
+
+ public URLWatchTimerTask(final URL url)
+ {
+ if (url == null)
+ throw new NullArgumentException("url");
+
+ this.url = url;
+ }
+
+ public void run()
+ {
+ try {
+ URLConnection conn = url.openConnection();
+ long lastModified = conn.getLastModified();
+
+ if (lastConfigured < lastModified) {
+ reconfigure(conn);
+ }
+ }
+ catch (Exception e) {
+ log.warn("Failed to check URL: " + url, e);
+ }
+ }
+
+ private void reconfigure(URLConnection conn)
+ {
+ boolean xml = conn.getContentType().equals("text/xml");
+ log.debug("reconfiguring; xml=" + xml);
+
+ if (xml) {
+ DOMConfigurator.configure(url);
+ }
+ else {
+ PropertyConfigurator.configure(url);
}
}
}
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development