Author: rgoers
Date: Mon May 12 06:22:54 2014
New Revision: 1593892

URL: http://svn.apache.org/r1593892
Log:
LOG4J2-469 - FailoverAppender was not resetting its status after the primary 
appender recovered.

Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
    
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
    logging/log4j/log4j2/trunk/src/changes/changes.xml

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java?rev=1593892&r1=1593891&r2=1593892&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
 Mon May 12 06:22:54 2014
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.ap
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.core.Appender;
@@ -56,9 +57,7 @@ public final class FailoverAppender exte
 
     private final long intervalMillis;
 
-    private long nextCheckMillis = 0;
-
-    private volatile boolean failure = false;
+    private volatile long nextCheckMillis = 0;
 
     private FailoverAppender(final String name, final Filter filter, final 
String primary, final String[] failovers,
                              final int intervalMillis, final Configuration 
config, final boolean ignoreExceptions) {
@@ -106,24 +105,20 @@ public final class FailoverAppender exte
             error("FailoverAppender " + getName() + " did not start 
successfully");
             return;
         }
-        if (!failure) {
+        long localCheckMillis = nextCheckMillis;
+        if (localCheckMillis == 0 || System.currentTimeMillis() > 
localCheckMillis) {
             callAppender(event);
         } else {
-            final long currentMillis = System.currentTimeMillis();
-            if (currentMillis >= nextCheckMillis) {
-                callAppender(event);
-            } else {
-                failover(event, null);
-            }
+            failover(event, null);
         }
     }
 
     private void callAppender(final LogEvent event) {
         try {
             primary.callAppender(event);
+            nextCheckMillis = 0;
         } catch (final Exception ex) {
             nextCheckMillis = System.currentTimeMillis() + intervalMillis;
-            failure = true;
             failover(event, ex);
         }
     }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java?rev=1593892&r1=1593891&r2=1593892&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java
 Mon May 12 06:22:54 2014
@@ -76,9 +76,10 @@ public class FailoverAppenderTest {
         app.clear();
         Thread.sleep(1100);
         onceLogger.error("Fail after recovery interval");
+        onceLogger.error("Second log message");
         events = app.getEvents();
         assertEquals("Did not recover", events.size(), 0);
         events = foApp.getEvents();
-        assertEquals("No events in primary appender", events.size(), 1);
+        assertEquals("Incorrect number of events in primary appender", 
events.size(), 2);
     }
 }

Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1593892&r1=1593891&r2=1593892&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Mon May 12 06:22:54 2014
@@ -22,6 +22,9 @@
   </properties>
   <body>
     <release version="2.0-rc2" date="2014-MM-DD" description="Bug fixes and 
enhancements">
+      <action issue="LOG4J2-469" dev="rgoers" type="fix">
+        FailoverAppender was not resetting its status after the primary 
appender recovered.
+      </action>
       <action issue="LOG4J2-623" dev="rgoers" type="fix">
         Generate MDC properties as a JSON map in JSONLayout.
       </action>


Reply via email to