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() {