LOG4J2-1121 initial version of a ReliabilityStrategy that sleeps before
stopping a configuration

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

Branch: refs/heads/master
Commit: 7bc0ad10e149ed213a860eb393738a841c794dd7
Parents: 1e017cb
Author: rpopma <[email protected]>
Authored: Sun Sep 20 05:51:57 2015 +0900
Committer: rpopma <[email protected]>
Committed: Sun Sep 20 05:51:57 2015 +0900

----------------------------------------------------------------------
 ...AwaitUnconditionallyReliabilityStrategy.java | 112 +++++++++++++++++++
 1 file changed, 112 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7bc0ad10/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java
new file mode 100644
index 0000000..5f8c204
--- /dev/null
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+
+package org.apache.logging.log4j.core.config;
+
+import java.util.Objects;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.Supplier;
+
+/**
+ * Reliability strategy that sleeps unconditionally for some time before 
allowing a Configuration to be stopped.
+ */
+public class AwaitUnconditionallyReliabilityStrategy implements 
ReliabilityStrategy {
+
+    private static final long SLEEP_MILLIS = 0;
+    private final LoggerConfig loggerConfig;
+
+    public AwaitUnconditionallyReliabilityStrategy(final LoggerConfig 
loggerConfig) {
+        this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig 
is null");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see 
org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier,
+     * java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, 
org.apache.logging.log4j.Level,
+     * org.apache.logging.log4j.message.Message, java.lang.Throwable)
+     */
+    @Override
+    public void log(Supplier<LoggerConfig> reconfigured, String loggerName, 
String fqcn, Marker marker, Level level,
+            Message data, Throwable t) {
+        loggerConfig.log(loggerName, fqcn, marker, level, data, t);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see 
org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier,
+     * org.apache.logging.log4j.core.LogEvent)
+     */
+    @Override
+    public void log(Supplier<LoggerConfig> reconfigured, LogEvent event) {
+        loggerConfig.log(event);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * 
org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config.
+     * LoggerConfig, org.apache.logging.log4j.util.Supplier)
+     */
+    @Override
+    public LoggerConfig getActiveLoggerConfig(Supplier<LoggerConfig> next) {
+        return this.loggerConfig;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see 
org.apache.logging.log4j.core.config.ReliabilityStrategy#afterLogEvent()
+     */
+    @Override
+    public void afterLogEvent() {
+        // no action
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see 
org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopAppenders()
+     */
+    @Override
+    public void beforeStopAppenders() {
+        // no action
+    }
+
+    /* (non-Javadoc)
+     * @see 
org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core.config.Configuration)
+     */
+    @Override
+    public void beforeStopConfiguration(Configuration configuration) {
+        // only sleep once per configuration stop
+        if (loggerConfig == configuration.getRootLogger()) {
+            try {
+                Thread.sleep(SLEEP_MILLIS);
+            } catch (InterruptedException e) {
+                StatusLogger.getLogger().warn("Sleep before stop configuration 
was interrupted.");
+            }
+        }
+    }
+
+}

Reply via email to