You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/01/12 20:06:49 UTC
svn commit: r898468 - in /tomcat/trunk/java/org/apache/juli:
ClassLoaderLogManager.java logging/LogFactory.java
Author: markt
Date: Tue Jan 12 19:06:48 2010
New Revision: 898468
URL: http://svn.apache.org/viewvc?rev=898468&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48421
Clean up a web application's logs and handlers when it stops. This involved modifying the fix that prevented log messages being lost in shutdown.
Modified:
tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java
tomcat/trunk/java/org/apache/juli/logging/LogFactory.java
Modified: tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java?rev=898468&r1=898467&r2=898468&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java (original)
+++ tomcat/trunk/java/org/apache/juli/ClassLoaderLogManager.java Tue Jan 12 19:06:48 2010
@@ -46,6 +46,46 @@
*/
public class ClassLoaderLogManager extends LogManager {
+ private final class Cleaner extends Thread {
+
+ @Override
+ public void run() {
+ // The JVM us being shutdown. Make sure all loggers for all class
+ // loaders are shutdown
+ for (ClassLoaderLogInfo clLogInfo : classLoaderLoggers.values()) {
+ for (Logger logger : clLogInfo.loggers.values()) {
+ resetLogger(logger);
+ }
+ }
+ }
+
+ private void resetLogger(Logger logger) {
+
+ Handler[] handlers = logger.getHandlers();
+ for (Handler handler : handlers) {
+ logger.removeHandler(handler);
+ try {
+ handler.close();
+ } catch (Exception e) {
+ // Ignore
+ }
+ }
+ }
+
+ }
+
+
+ // ------------------------------------------------------------Constructors
+
+ public ClassLoaderLogManager() {
+ super();
+ try {
+ Runtime.getRuntime().addShutdownHook(new Cleaner());
+ } catch (IllegalStateException ise) {
+ // We are probably already being shutdown. Ignore this error.
+ }
+ }
+
// -------------------------------------------------------------- Variables
@@ -485,33 +525,6 @@
}
- /**
- * Need to override reset so the loggers loaded by the web applications can
- * be shutdown.
- */
- @Override
- public void reset() {
- super.reset();
- for (ClassLoaderLogInfo classLoaderLogInfo : classLoaderLoggers.values()) {
- for (Logger logger : classLoaderLogInfo.loggers.values()) {
- resetLogger(logger);
- }
- }
- }
-
- private void resetLogger(Logger logger) {
-
- Handler[] handlers = logger.getHandlers();
- for (Handler handler : handlers) {
- logger.removeHandler(handler);
- try {
- handler.close();
- } catch (Exception e) {
- // Ignore
- }
- }
- }
-
// ---------------------------------------------------- LogNode Inner Class
Modified: tomcat/trunk/java/org/apache/juli/logging/LogFactory.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/logging/LogFactory.java?rev=898468&r1=898467&r2=898468&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/logging/LogFactory.java (original)
+++ tomcat/trunk/java/org/apache/juli/logging/LogFactory.java Tue Jan 12 19:06:48 2010
@@ -19,6 +19,7 @@
import java.util.Properties;
+import java.util.logging.LogManager;
@@ -325,8 +326,10 @@
*
* @param classLoader ClassLoader for which to release the LogFactory
*/
- public static void release(ClassLoader classLoader) {
- // nothing - we don't use any class loaders
+ public static void release(
+ @SuppressWarnings("unused") ClassLoader classLoader) {
+ // JULI's log manager looks at the current classLoader
+ LogManager.getLogManager().reset();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org