Author: carnold
Date: Fri Dec 15 16:07:02 2006
New Revision: 487725

URL: http://svn.apache.org/viewvc?view=rev&rev=487725
Log:
Bug 41186: DiscardSummary events create NPE in layouts

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

Modified: logging/log4j/trunk/src/java/org/apache/log4j/AsyncAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/java/org/apache/log4j/AsyncAppender.java?view=diff&rev=487725&r1=487724&r2=487725
==============================================================================
--- logging/log4j/trunk/src/java/org/apache/log4j/AsyncAppender.java (original)
+++ logging/log4j/trunk/src/java/org/apache/log4j/AsyncAppender.java Fri Dec 15 
16:07:02 2006
@@ -465,7 +465,11 @@
           new Object[] { new Integer(count), maxEvent.getMessage() });
 
       return new LoggingEvent(
-        null, maxEvent.getLogger(), maxEvent.getLevel(), msg, null);
+              "org.apache.log4j.AsyncAppender.DONT_REPORT_LOCATION",
+               maxEvent.getLogger(),
+               maxEvent.getLevel(),
+               msg,
+               null);
     }
   }
 

Modified: 
logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java?view=diff&rev=487725&r1=487724&r2=487725
==============================================================================
--- 
logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java 
(original)
+++ 
logging/log4j/trunk/tests/src/java/org/apache/log4j/AsyncAppenderTestCase.java 
Fri Dec 15 16:07:02 2006
@@ -446,6 +446,73 @@
         }
     }
 
+
+    /**
+     * Tests location processing when buffer is full and locationInfo=true.
+     * See bug 41186.
+     */
+    public void testLocationInfoTrue() {
+        BlockableVectorAppender blockableAppender = new 
BlockableVectorAppender();
+        AsyncAppender async = new AsyncAppender();
+        async.addAppender(blockableAppender);
+        async.setBufferSize(5);
+        async.setLocationInfo(true);
+        async.setBlocking(false);
+        async.activateOptions();
+        Logger rootLogger = Logger.getRootLogger();
+        rootLogger.addAppender(async);
+        Greeter greeter = new Greeter(rootLogger, 100);
+        synchronized(blockableAppender.getMonitor()) {
+            greeter.run();
+            rootLogger.error("That's all folks.");
+        }
+        async.close();
+        Vector events = blockableAppender.getVector();
+        LoggingEvent initialEvent = (LoggingEvent) events.get(0);
+        LoggingEvent discardEvent = (LoggingEvent) events.get(events.size() - 
1);
+        PatternLayout layout = new PatternLayout();
+        layout.setConversionPattern("%C:%L %m%n");
+        layout.activateOptions();
+        String initialStr = layout.format(initialEvent);
+        assertEquals(AsyncAppenderTestCase.class.getName(),
+                initialStr.substring(0, 
AsyncAppenderTestCase.class.getName().length()));
+        String discardStr = layout.format(discardEvent);
+        assertEquals("?:? ", discardStr.substring(0, 4));
+    }
+
+
+    /**
+     * Tests location processing when buffer is full and locationInfo=false.
+     * See bug 41186.
+     */
+    public void testLocationInfoFalse() {
+        BlockableVectorAppender blockableAppender = new 
BlockableVectorAppender();
+        AsyncAppender async = new AsyncAppender();
+        async.addAppender(blockableAppender);
+        async.setBufferSize(5);
+        async.setLocationInfo(false);
+        async.setBlocking(false);
+        async.activateOptions();
+        Logger rootLogger = Logger.getRootLogger();
+        rootLogger.addAppender(async);
+        Greeter greeter = new Greeter(rootLogger, 100);
+        synchronized(blockableAppender.getMonitor()) {
+            greeter.run();
+            rootLogger.error("That's all folks.");
+        }
+        async.close();
+        Vector events = blockableAppender.getVector();
+        LoggingEvent initialEvent = (LoggingEvent) events.get(0);
+        LoggingEvent discardEvent = (LoggingEvent) events.get(events.size() - 
1);
+        PatternLayout layout = new PatternLayout();
+        layout.setConversionPattern("%C:%L %m%n");
+        layout.activateOptions();
+        String initialStr = layout.format(initialEvent);
+        assertEquals("?:? ", initialStr.substring(0, 4));
+        String discardStr = layout.format(discardEvent);
+        assertEquals("?:? ", discardStr.substring(0, 4));
+    }
+
     /**
      * Tests behavior when wrapped appender
      *    makes log request on dispatch thread.



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

Reply via email to