LOG4J2-1121 AbstractConfiguration notifies the ReliabilityStrategy of
each LoggerConfig that the config is stopping and that the appenders
will be stopped

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

Branch: refs/heads/master
Commit: 86dde4ee7e29968621029b554eeaecbc270ae2f2
Parents: c817d70
Author: rpopma <[email protected]>
Authored: Sun Sep 20 05:32:39 2015 +0900
Committer: rpopma <[email protected]>
Committed: Sun Sep 20 05:32:39 2015 +0900

----------------------------------------------------------------------
 .../core/config/AbstractConfiguration.java      | 26 ++++++++++++++------
 1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/86dde4ee/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 8d1cb41..152e667 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
@@ -196,6 +196,12 @@ public abstract class AbstractConfiguration extends 
AbstractFilterable implement
     public void stop() {
         this.setStopping();
         LOGGER.trace("Stopping {}...", this);
+        
+        for (final LoggerConfig loggerConfig : loggers.values()) {
+            
loggerConfig.getReliabilityStrategy().beforeStopConfiguration(this);
+        }
+        LOGGER.trace("AbstractConfiguration notified {} ReliabilityStrategies 
that config will be stopped.",
+                loggers.size());
 
         // LOG4J2-392 first stop AsyncLogger Disruptor thread
         final LoggerContextFactory factory = LogManager.getFactory();
@@ -246,6 +252,12 @@ public abstract class AbstractConfiguration extends 
AbstractFilterable implement
         }
         LOGGER.trace("AbstractConfiguration stopped {} AsyncAppenders.", 
asyncAppenderCount);
 
+        for (final LoggerConfig loggerConfig : loggers.values()) {
+            loggerConfig.getReliabilityStrategy().beforeStopAppenders();
+        }
+        LOGGER.trace("AbstractConfiguration notified {} ReliabilityStrategies 
that appenders will be stopped.",
+                loggers.size());
+
         int appenderCount = 0;
         for (int i = array.length - 1; i >= 0; --i) {
             if (array[i].isStarted()) { // then stop remaining Appenders
@@ -256,20 +268,18 @@ public abstract class AbstractConfiguration extends 
AbstractFilterable implement
         LOGGER.trace("AbstractConfiguration stopped {} Appenders.", 
appenderCount);
 
         int loggerCount = 0;
-        for (final LoggerConfig logger : loggers.values()) {
-            // clear appenders, even if this logger is already stopped.
-            logger.clearAppenders();
+        for (final LoggerConfig loggerConfig : loggers.values()) {
 
             // AsyncLoggerConfigHelper decreases its ref count when an 
AsyncLoggerConfig is stopped.
             // Stopping the same AsyncLoggerConfig twice results in an 
incorrect ref count and
             // the shared Disruptor may be shut down prematurely, resulting in 
NPE or other errors.
-            if (alreadyStopped.contains(logger)) {
-                continue;
+            if (!alreadyStopped.contains(loggerConfig)) {
+                loggerConfig.stop();
+                loggerCount++;
             }
-            logger.stop();
-            loggerCount++;
+            loggerConfig.clearAppenders();
         }
-        LOGGER.trace("AbstractConfiguration stopped {} Loggers.", loggerCount);
+        LOGGER.trace("AbstractConfiguration stopped {} LoggerConfigs.", 
loggerCount);
 
         // AsyncLoggerConfigHelper decreases its ref count when an 
AsyncLoggerConfig is stopped.
         // Stopping the same AsyncLoggerConfig twice results in an incorrect 
ref count and

Reply via email to