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
