You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2015/11/09 11:08:36 UTC

[12/13] logging-log4j2 git commit: LOG4J2-323/LOG4J2-493 bugfix: AbstractContext.stop() performed operations on the named LoggerConfigs but omitted some of these operations on the root LoggerConfig.

LOG4J2-323/LOG4J2-493 bugfix: AbstractContext.stop() performed
operations on the named LoggerConfigs but omitted some of these
operations on the root LoggerConfig.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/52989bf3
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/52989bf3
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/52989bf3

Branch: refs/heads/LOG4J-1181
Commit: 52989bf3100a7a0bd2d7212ad564f8ec54b69dd6
Parents: 00a7ee1
Author: rpopma <rp...@apache.org>
Authored: Mon Nov 9 15:21:18 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Nov 9 15:21:18 2015 +0900

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 48 +++++++++++++-------
 1 file changed, 31 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/52989bf3/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
index fec1985..6a335b1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java
@@ -278,13 +278,19 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         for (final LoggerConfig loggerConfig : loggerConfigs.values()) {
             loggerConfig.getReliabilityStrategy().beforeStopConfiguration(this);
         }
+        root.getReliabilityStrategy().beforeStopConfiguration(this);
+        
         final String cls = getClass().getSimpleName();
-        LOGGER.trace("{} notified {} ReliabilityStrategies that config will be stopped.", cls, loggerConfigs.size());
+        LOGGER.trace("{} notified {} ReliabilityStrategies that config will be stopped.", cls, loggerConfigs.size()
+                + 1);
         
-        LOGGER.trace("{} stopping {} LoggerConfigs.", cls, loggerConfigs.size());
-        for (final LoggerConfig logger : loggerConfigs.values()) {
-            logger.stop();
+        if (!loggerConfigs.isEmpty()) {
+            LOGGER.trace("{} stopping {} LoggerConfigs.", cls, loggerConfigs.size());
+            for (final LoggerConfig logger : loggerConfigs.values()) {
+                logger.stop();
+            }
         }
+        LOGGER.trace("{} stopping root LoggerConfig.", cls);
         if (!root.isStopped()) {
             root.stop();
         }
@@ -293,27 +299,24 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
             LOGGER.trace("{} stopping AsyncLoggerConfigDisruptor.", cls);
             asyncLoggerConfigDisruptor.stop();
         }
-        
-        LOGGER.trace("{} stopping AsyncAppenders.", cls);
-
+                
         // Stop the appenders in reverse order in case they still have activity.
         final Appender[] array = appenders.values().toArray(new Appender[appenders.size()]);
-
-        // LOG4J2-511, LOG4J2-392 stop AsyncAppenders first
-        int asyncAppenderCount = 0;
-        for (int i = array.length - 1; i >= 0; --i) {
-            if (array[i] instanceof AsyncAppender) {
-                array[i].stop();
-                asyncAppenderCount++;
+        final List<Appender> async = getAsyncAppenders(array);
+        if (!async.isEmpty()) {
+            // LOG4J2-511, LOG4J2-392 stop AsyncAppenders first
+            LOGGER.trace("{} stopping {} AsyncAppenders.", cls, async.size());
+            for (Appender appender : async) {
+                appender.stop();
             }
         }
-        LOGGER.trace("{} stopped {} AsyncAppenders.", cls, asyncAppenderCount);
 
         LOGGER.trace("{} notifying ReliabilityStrategies that appenders will be stopped.", cls);
         for (final LoggerConfig loggerConfig : loggerConfigs.values()) {
             loggerConfig.getReliabilityStrategy().beforeStopAppenders();
         }
-
+        root.getReliabilityStrategy().beforeStopAppenders();
+        
         LOGGER.trace("{} stopping remaining Appenders.", cls);
         int appenderCount = 0;
         for (int i = array.length - 1; i >= 0; --i) {
@@ -324,7 +327,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
         LOGGER.trace("{} stopped {} remaining Appenders.", cls, appenderCount);
 
-        LOGGER.trace("{} cleaning Appenders from {} LoggerConfigs.", cls, loggerConfigs.size());
+        LOGGER.trace("{} cleaning Appenders from {} LoggerConfigs.", cls, loggerConfigs.size() + 1);
         for (final LoggerConfig loggerConfig : loggerConfigs.values()) {
 
             // LOG4J2-520, LOG4J2-392:
@@ -334,6 +337,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
             // Only *after this* the appenders can be cleared or events will be lost.
             loggerConfig.clearAppenders();
         }
+        root.clearAppenders();
 
         if (watchManager.isStarted()) {
             watchManager.stop();
@@ -349,6 +353,16 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement
         }
         LOGGER.debug("Stopped {} OK", this);
     }
+    
+    private List<Appender> getAsyncAppenders(final Appender[] all) {
+        final List<Appender> result = new ArrayList<Appender>();
+        for (int i = all.length - 1; i >= 0; --i) {
+            if (all[i] instanceof AsyncAppender) {
+                result.add(all[i]);
+            }
+        }
+        return result;
+    }
 
     @Override
     public boolean isShutdownHookEnabled() {