You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2006/03/16 18:40:01 UTC

svn commit: r386399 - /logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java

Author: carnold
Date: Thu Mar 16 09:39:58 2006
New Revision: 386399

URL: http://svn.apache.org/viewcvs?rev=386399&view=rev
Log:
Bug 30106: AsyncAppender can hang if appender logs

Modified:
    logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java
URL: http://svn.apache.org/viewcvs/logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java?rev=386399&r1=386398&r2=386399&view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java Thu Mar 16 09:39:58 2006
@@ -446,6 +446,30 @@
         }
     }
 
+    /**
+     * Tests behavior when wrapped appender
+     *    makes log request on dispatch thread.
+     *
+     * See bug 30106
+     */
+    public void testLoggingInDispatcher() throws InterruptedException {
+        BlockableVectorAppender appender = new BlockableVectorAppender();
+        asyncAppender =
+          createAsyncAppender(appender, 2);
+        //
+        //   triggers several log requests on dispatch thread
+        //
+        root.fatal("Anybody up there...");
+        Thread.sleep(100);
+        asyncAppender.close();
+
+        Vector events = appender.getVector();
+        //
+        //  last message should start with "Discarded"
+        LoggingEvent event = (LoggingEvent) events.get(events.size() - 1);
+        assertEquals("Discarded", event.getMessage().toString().substring(0, 9));
+    }
+
 
   /**
    * Appender that throws a NullPointerException on calls to append.
@@ -552,6 +576,16 @@
       synchronized (monitor) {
         dispatcher = Thread.currentThread();
         super.append(event);
+          //
+          //   if fatal, echo messages for testLoggingInDispatcher
+          //
+          if (event.getLevel() == Level.FATAL) {
+              Logger logger = event.getLogger();
+              logger.error(event.getMessage().toString());
+              logger.warn(event.getMessage().toString());
+              logger.info(event.getMessage().toString());
+              logger.debug(event.getMessage().toString());
+          }
       }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org