You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2017/09/12 05:18:17 UTC

svn commit: r1808082 - in /openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave: Meecrowave.java logging/log4j2/Log4j2Shutdown.java

Author: struberg
Date: Tue Sep 12 05:18:16 2017
New Revision: 1808082

URL: http://svn.apache.org/viewvc?rev=1808082&view=rev
Log:
MEECROWAVE-65 improve system props backup and log4j2 shutdown hook handling

log4j.shutdownHookEnabled got set a bit too late, so it didn't work.
Which made the logs during shutdown disappear. 

Modified:
    openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
    openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java

Modified: openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java?rev=1808082&r1=1808081&r2=1808082&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java Tue Sep 12 05:18:16 2017
@@ -372,10 +372,32 @@ public class Meecrowave implements AutoC
     }
 
     public Meecrowave start() {
+        final Map<String, String> systemPropsToRestore = new HashMap<>();
+
         if (configuration.getMeecrowaveProperties() != null && !"meecrowave.properties".equals(configuration.getMeecrowaveProperties())) {
             configuration.loadFrom(configuration.getMeecrowaveProperties());
         }
 
+        if (configuration.loggingGlobalSetup) {
+
+            setSystemProperty(systemPropsToRestore, "log4j.shutdownHookEnabled", "false");
+            setSystemProperty(systemPropsToRestore, "openwebbeans.logging.factory", Log4j2LoggerFactory.class.getName());
+            setSystemProperty(systemPropsToRestore, "org.apache.cxf.Logger", Log4j2Logger.class.getName());
+            setSystemProperty(systemPropsToRestore, "org.apache.tomcat.Logger", Log4j2Log.class.getName());
+
+            postTask = () -> {
+                new Log4j2Shutdown().shutodwn();
+                systemPropsToRestore.entrySet().forEach(entry -> {
+                    if (entry.getValue() == null) {
+                        System.clearProperty(entry.getKey());
+                    }
+                    else {
+                        System.setProperty(entry.getKey(), entry.getValue());
+                    }
+                });
+            };
+        }
+
         setupJmx(configuration.isTomcatNoJmx());
 
         clearCatalinaSystemProperties = System.getProperty("catalina.base") == null && System.getProperty("catalina.home") == null;
@@ -383,42 +405,6 @@ public class Meecrowave implements AutoC
             System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
         }
 
-        if (configuration.loggingGlobalSetup) {
-            final String[] toRestore = new String[]{
-                    System.getProperty("openwebbeans.logging.factory"),
-                    System.getProperty("org.apache.cxf.Logger"),
-                    System.getProperty("org.apache.tomcat.Logger"),
-                    System.getProperty("log4j.shutdownHookEnabled")
-            };
-            System.setProperty("openwebbeans.logging.factory", Log4j2LoggerFactory.class.getName());
-            System.setProperty("org.apache.cxf.Logger", Log4j2Logger.class.getName());
-            System.setProperty("org.apache.tomcat.Logger", Log4j2Log.class.getName());
-            System.setProperty("log4j.shutdownHookEnabled", "false");
-            postTask = () -> {
-                if (toRestore[0] == null) {
-                    System.clearProperty("openwebbeans.logging.factory");
-                } else {
-                    System.setProperty("openwebbeans.logging.factory", toRestore[0]);
-                }
-                if (toRestore[1] == null) {
-                    System.clearProperty("org.apache.cxf.Logger");
-                } else {
-                    System.setProperty("org.apache.cxf.Logger", toRestore[1]);
-                }
-                if (toRestore[2] == null) {
-                    System.clearProperty("org.apache.tomcat.Logger");
-                } else {
-                    System.setProperty("org.apache.tomcat.Logger", toRestore[2]);
-                }
-
-                new Log4j2Shutdown().run();
-                if (toRestore[3] == null) { // note this can be too late
-                    System.clearProperty("log4j.shutdownHookEnabled");
-                } else {
-                    System.setProperty("log4j.shutdownHookEnabled", toRestore[3]);
-                }
-            };
-        }
         if (configuration.quickSession) {
             tomcat = new TomcatWithFastSessionIDs();
         } else {
@@ -660,6 +646,20 @@ public class Meecrowave implements AutoC
         return this;
     }
 
+
+    /**
+     * Store away the current system property for restoring it later
+     * during shutdown.
+     * @param backupPropertyMap a Map to store away the previous value before setting the newValue
+     * @param propertyKey
+     * @param newValue
+     */
+    private void setSystemProperty(Map<String, String> backupPropertyMap, String propertyKey, String newValue) {
+        backupPropertyMap.put(propertyKey, System.getProperty(propertyKey));
+
+        System.setProperty(propertyKey, newValue);
+    }
+
     private void broadcastHostEvent(final String event, final Host host) {
         switch (event) {
             case Lifecycle.AFTER_START_EVENT: {

Modified: openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java?rev=1808082&r1=1808081&r2=1808082&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java Tue Sep 12 05:18:16 2017
@@ -20,9 +20,12 @@ package org.apache.meecrowave.logging.lo
 
 import org.apache.logging.log4j.LogManager;
 
-public class Log4j2Shutdown implements Runnable {
-    @Override
-    public void run() {
+/**
+ * Hide away Log4j2 stuff
+ */
+public class Log4j2Shutdown {
+
+    public void shutodwn() {
         try {
             // We disabled the log4j shutdown hook to gain more control and keep logs during shutdown.
             // See #disableLog4jShutdownHook()