Author: carnold
Date: Thu Apr 26 12:46:58 2007
New Revision: 532842

URL: http://svn.apache.org/viewvc?view=rev&rev=532842
Log:
Bug 21796: SocketAppender doesn't fall back with FallbackErrorHandler

Added:
    
logging/log4j/branches/v1_2-branch/tests/input/xml/SocketAppenderTestConfig.xml
    
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SocketAppenderTest.java
Modified:
    
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SocketAppender.java
    logging/log4j/branches/v1_2-branch/tests/build.xml

Modified: 
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SocketAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SocketAppender.java?view=diff&rev=532842&r1=532841&r2=532842
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SocketAppender.java
 (original)
+++ 
logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/net/SocketAppender.java
 Thu Apr 26 12:46:58 2007
@@ -26,6 +26,7 @@
 import java.io.ObjectOutputStream;
 
 import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.spi.ErrorCode;
 import org.apache.log4j.spi.LoggingEvent;
 import org.apache.log4j.AppenderSkeleton;
 
@@ -210,6 +211,9 @@
       if(reconnectionDelay > 0) {
         msg += " We will try again later.";
        fireConnector(); // fire the connector thread
+      } else {
+          msg += " We are not retrying.";
+          errorHandler.error(msg, e, ErrorCode.GENERIC_FAILURE);
       } 
       LogLog.error(msg);
     }
@@ -246,6 +250,9 @@
        LogLog.warn("Detected problem with connection: "+e);
        if(reconnectionDelay > 0) {
          fireConnector();
+       } else {
+           errorHandler.error("Detected problem with connection, not 
reconnecting.", e,
+                      ErrorCode.GENERIC_FAILURE);
        }
       }
     }

Modified: logging/log4j/branches/v1_2-branch/tests/build.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/build.xml?view=diff&rev=532842&r1=532841&r2=532842
==============================================================================
--- logging/log4j/branches/v1_2-branch/tests/build.xml (original)
+++ logging/log4j/branches/v1_2-branch/tests/build.xml Thu Apr 26 12:46:58 2007
@@ -154,7 +154,8 @@
                                      OptionConverter, BoundedFIFO, 
                                      CyclicBuffer, OR, 
                                      LevelMatchFilter, PatternParser, 
-                                     PatternLayout, RFA, ERFA, DRFA, 
NTEventLogAppender, Syslog"/>
+                                     PatternLayout, RFA, ERFA, DRFA, 
+                                                                        
NTEventLogAppender, Syslog, Socket"/>
 
   <!-- ================================================================= -->
   <!-- Longer unit tests                                                 -->
@@ -414,6 +415,15 @@
       <test name="org.apache.log4j.nt.NTEventLogAppenderTest" />
     </junit>
   </target>
+
+  <target name="Socket" depends="build">
+      <junit printsummary="yes" fork="yes" haltonfailure="${haltonfailure}">
+        <classpath refid="tests.classpath"/>
+        <formatter type="plain" usefile="false"/>
+        <test name="org.apache.log4j.net.SocketAppenderTest" />
+      </junit>
+  </target>
+
 
   <!-- ================================================================= -->
   <!-- ========================= Very long Tests ======================= -->

Added: 
logging/log4j/branches/v1_2-branch/tests/input/xml/SocketAppenderTestConfig.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/input/xml/SocketAppenderTestConfig.xml?view=auto&rev=532842
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/tests/input/xml/SocketAppenderTestConfig.xml 
(added)
+++ 
logging/log4j/branches/v1_2-branch/tests/input/xml/SocketAppenderTestConfig.xml 
Thu Apr 26 12:46:58 2007
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 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.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration debug="true" 
+xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+
+        <!-- primary appender -->
+        <appender name="remote" class="org.apache.log4j.net.SocketAppender">
+
+                <!-- fallback on error -->
+                <errorHandler 
+class="org.apache.log4j.varia.FallbackErrorHandler">
+                        <logger-ref 
ref="org.apache.log4j.net.SocketAppenderTest"/>
+                        <appender-ref ref="lastOnly"/>
+                </errorHandler>
+                
+                <param name="RemoteHost" value="localhost"/>
+                <param name="Port" value="8189"/>
+                <param name="ReconnectionDelay" value="0"/>
+        </appender>
+
+        
+        <!-- secondary appender -->
+        <appender name="lastOnly" 
+class="org.apache.log4j.net.SocketAppenderTest$LastOnlyAppender"></appender>
+
+        
+        <!-- logger -->
+        <logger name="SocketAppenderTest">
+                <appender-ref ref="remote"/>
+        </logger>
+
+        
+        <!-- logger
+             dummy, so i can have early access to lastOnly appender instance
+        -->
+        <logger name="org.apache.log4j.net.SocketAppenderTestDummy">
+                <appender-ref ref="lastOnly"/>
+        </logger>
+
+        
+</log4j:configuration>
+

Added: 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SocketAppenderTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SocketAppenderTest.java?view=auto&rev=532842
==============================================================================
--- 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SocketAppenderTest.java
 (added)
+++ 
logging/log4j/branches/v1_2-branch/tests/src/java/org/apache/log4j/net/SocketAppenderTest.java
 Thu Apr 26 12:46:58 2007
@@ -0,0 +1,97 @@
+/*
+ * 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.log4j.net;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Appender;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Logger;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.log4j.xml.DOMConfigurator;
+
+public class SocketAppenderTest extends TestCase {
+
+    /**
+        *  Create new instance.
+        */
+    public SocketAppenderTest(final String testName) {
+           super(testName);
+    }
+
+    /* JUnit's setUp and tearDown */
+
+    protected void setUp() {
+        DOMConfigurator.configure("input/xml/SocketAppenderTestConfig.xml");
+
+        logger = Logger.getLogger(SocketAppenderTest.class);
+        primary = logger.getAppender("remote");
+        secondary = (LastOnlyAppender) Logger.getLogger(
+                
"org.apache.log4j.net.SocketAppenderTestDummy").getAppender("lastOnly");
+    }
+
+    protected void tearDown() {
+    }
+
+    /* Tests */
+
+    public void testFallbackErrorHandlerWhenStarting() {
+        String msg = "testFallbackErrorHandlerWhenStarting";
+        logger.debug(msg);
+
+        // above debug log will fail and shoul be redirected to secondary 
appender
+        assertEquals("SocketAppender with FallbackErrorHandler", msg, 
secondary.getLastMessage());
+    }
+
+    /* Fields */
+
+    private static Logger logger;
+    private static Appender primary;
+    private static LastOnlyAppender secondary;
+
+    /* Inner classes */
+
+    /**
+     * Inner-class For debugging purposes only Saves last LoggerEvent
+     */
+    static public class LastOnlyAppender extends AppenderSkeleton {
+        protected void append(LoggingEvent event) {
+            this.lastEvent = event;
+        }
+
+        public boolean requiresLayout() {
+            return false;
+        }
+
+        public void close() {
+            this.closed = true;
+        }
+
+        /**
+         * @return last appended LoggingEvent's message
+         */
+        public String getLastMessage() {
+            if (this.lastEvent != null)
+                return this.lastEvent.getMessage().toString();
+            else
+                return "";
+        }
+
+        private LoggingEvent lastEvent;
+    };
+
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to