LOG4J2-1121 handle programmatic reconfiguration - ReliabilityStrategyFactory is now a concrete class that uses system properties to determine which ReliabilityStrategy implementation to return - ConfigurationMonitor implementations now delegates to ReliabilityStrategyFactory
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c5304b50 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c5304b50 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c5304b50 Branch: refs/heads/master Commit: c5304b50817fbd7d7a8e2f8682320e9f2672084c Parents: 3825b08 Author: rpopma <[email protected]> Authored: Sun Sep 20 14:13:37 2015 +0900 Committer: rpopma <[email protected]> Committed: Sun Sep 20 14:13:37 2015 +0900 ---------------------------------------------------------------------- .../log4j/core/config/ConfigurationMonitor.java | 11 ++++++++- .../config/DefaultConfigurationMonitor.java | 2 +- .../core/config/FileConfigurationMonitor.java | 2 +- .../core/config/ReliabilityStrategyFactory.java | 25 ++++++++++++++++++-- 4 files changed, 35 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c5304b50/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java index 3fc3d03..44c803d 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java @@ -19,10 +19,19 @@ package org.apache.logging.log4j.core.config; /** * Interface that must be implemented to provide notification of configuration changes. */ -public interface ConfigurationMonitor extends ReliabilityStrategyFactory { +public interface ConfigurationMonitor { /** * Called to determine if the configuration has changed. */ void checkConfiguration(); + + /** + * Determines how to log events reliably during or after a configuration change. + * + * @param loggerConfig the LoggerConfig the resulting {@code ReliabilityStrategy} is associated with + * @return a ReliabilityStrategy that helps the specified LoggerConfig to log events reliably during or after a + * configuration change + */ + ReliabilityStrategy getReliabilityStrategy(final LoggerConfig loggerConfig); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c5304b50/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java index f52cfa7..a61cee1 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java @@ -34,6 +34,6 @@ public class DefaultConfigurationMonitor implements ConfigurationMonitor { */ @Override public ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig) { - return new DefaultReliabilityStrategy(loggerConfig); + return ReliabilityStrategyFactory.getReliabilityStrategy(loggerConfig); } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c5304b50/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java index 8e95036..d0775d0 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java @@ -113,6 +113,6 @@ public class FileConfigurationMonitor implements ConfigurationMonitor { */ @Override public ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig) { - return new AwaitCompletionReliabilityStrategy(loggerConfig); + return ReliabilityStrategyFactory.getReliabilityStrategy(loggerConfig); } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c5304b50/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java index 2a9dab5..cdbb312 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java @@ -17,9 +17,30 @@ package org.apache.logging.log4j.core.config; +import org.apache.logging.log4j.util.PropertiesUtil; + /** * Factory for ReliabilityStrategies. */ -public interface ReliabilityStrategyFactory { - ReliabilityStrategy getReliabilityStrategy(final LoggerConfig loggerConfig); +public class ReliabilityStrategyFactory { + private ReliabilityStrategyFactory() { + } + + /** + * Returns a new {@code AwaitUnconditionallyReliabilityStrategy} if system property + * {@code log4j.alwaysWaitBeforeStopOldConfig} was set to {@code true}, otherwise (by default return) a new + * {@code AwaitCompletionReliabilityStrategy} instance. + * + * @param loggerConfig the LoggerConfig the resulting {@code ReliabilityStrategy} is associated with + * @return a ReliabilityStrategy that helps the specified LoggerConfig to log events reliably during or after a + * configuration change + */ + public static ReliabilityStrategy getReliabilityStrategy(final LoggerConfig loggerConfig) { + boolean waitUnconditionally = PropertiesUtil.getProperties().getBooleanProperty( + "log4j.alwaysWaitBeforeStopOldConfig", false); + if (waitUnconditionally) { + return new AwaitUnconditionallyReliabilityStrategy(loggerConfig); + } + return new AwaitCompletionReliabilityStrategy(loggerConfig); + } }
