Author: carnold
Date: Wed Sep 19 11:32:20 2007
New Revision: 577413

URL: http://svn.apache.org/viewvc?rev=577413&view=rev
Log:
Bug 43374: DailyRollingFileAppender can lose messages on failed rollover attempt

Added:
    logging/log4j/trunk/tests/witness/drfa_blockedRollover.log
Modified:
    logging/log4j/trunk/src/changes/changes.xml
    
logging/log4j/trunk/src/main/java/org/apache/log4j/DailyRollingFileAppender.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/DRFATestCase.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=577413&r1=577412&r2=577413&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Wed Sep 19 11:32:20 2007
@@ -22,6 +22,7 @@
   <body>
 
     <release version="1.2.16" date="TBD" description="">
+       <action action="fix" issue="43374">DailyRollingFileAppender may lose 
messages during failed rollover attempts.</action>
        <action action="fix" issue="43312">Fix mangled 
source-repository.html.</action>
        <action action="fix" issue="43387">Minor documentation changes.</action>
        <action action="fix" issue="43304">Make javamail, jmx, jms dependencies 
optional in pom.xml.</action>

Modified: 
logging/log4j/trunk/src/main/java/org/apache/log4j/DailyRollingFileAppender.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/DailyRollingFileAppender.java?rev=577413&r1=577412&r2=577413&view=diff
==============================================================================
--- 
logging/log4j/trunk/src/main/java/org/apache/log4j/DailyRollingFileAppender.java
 (original)
+++ 
logging/log4j/trunk/src/main/java/org/apache/log4j/DailyRollingFileAppender.java
 Wed Sep 19 11:32:20 2007
@@ -328,10 +328,10 @@
     try {
       // This will also close the file. This is OK since multiple
       // close operations are safe.
-      this.setFile(fileName, false, this.bufferedIO, this.bufferSize);
+      this.setFile(fileName, true, this.bufferedIO, this.bufferSize);
     }
     catch(IOException e) {
-      errorHandler.error("setFile("+fileName+", false) call failed.");
+      errorHandler.error("setFile("+fileName+", true) call failed.");
     }
     scheduledFilename = datedFilename;
   }

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/DRFATestCase.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/DRFATestCase.java?rev=577413&r1=577412&r2=577413&view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/DRFATestCase.java 
(original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/DRFATestCase.java Wed 
Sep 19 11:32:20 2007
@@ -20,11 +20,13 @@
 import junit.framework.TestCase;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.Calendar;
-import java.util.TimeZone;
 import java.util.Date;
-import java.text.SimpleDateFormat;
+import java.util.TimeZone;
+import org.apache.log4j.util.Compare;
 
 /**
    Exhaustive test of the DailyRollingFileAppender compute algorithm.
@@ -421,5 +423,48 @@
         assertTrue(firstFile.length() > 0);
 
     }
+
+    /**
+     * Tests rollOver when log file is unabled to be renamed.
+     * See bug 43374.
+     *
+     * @throws IOException if io error.
+     * @throws InterruptedException if test interrupted while waiting for the 
start of the next minute.
+     */
+    public void testBlockedRollover() throws IOException, InterruptedException 
{
+        Layout layout = new SimpleLayout();
+        String filename = "output/drfa_blockedRollover.log";
+        String pattern = "'.'yyyy-MM-dd-HH-mm";
+
+
+        Date start = new Date();
+        DailyRollingFileAppender appender =
+                new DailyRollingFileAppender(layout,
+                        filename,
+                        pattern);
+        appender.setAppend(false);
+        Logger root = Logger.getRootLogger();
+        root.addAppender(appender);
+        //
+        //   open next two anticipated rollover file names
+        //
+        FileOutputStream os1 = new FileOutputStream(filename + new 
SimpleDateFormat(pattern).format(start));
+        FileOutputStream os2 = new FileOutputStream(filename + new 
SimpleDateFormat(pattern).format(
+                new Date(start.getTime() + 60000)));
+        root.info("Prior to rollover");
+        //
+        //   sleep until three seconds into next minute
+        //
+        Thread.sleep(63000 - (start.getTime() % 60000));
+        //
+        //  should trigger failed rollover
+        //
+        root.info("Rollover attempt while blocked");
+        os1.close();
+        os2.close();
+        root.info("Message after block removed");
+        assertTrue(Compare.compare(filename, 
"witness/drfa_blockedRollover.log"));
+    }
+
 
 }

Added: logging/log4j/trunk/tests/witness/drfa_blockedRollover.log
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/tests/witness/drfa_blockedRollover.log?rev=577413&view=auto
==============================================================================
--- logging/log4j/trunk/tests/witness/drfa_blockedRollover.log (added)
+++ logging/log4j/trunk/tests/witness/drfa_blockedRollover.log Wed Sep 19 
11:32:20 2007
@@ -0,0 +1,3 @@
+INFO - Prior to rollover
+INFO - Rollover attempt while blocked
+INFO - Message after block removed



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

Reply via email to