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]