You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2014/08/11 16:38:02 UTC

svn commit: r1617298 - in /logging/log4j/log4j2/trunk: log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java src/changes/changes.xml

Author: rpopma
Date: Mon Aug 11 14:38:02 2014
New Revision: 1617298

URL: http://svn.apache.org/r1617298
Log:
LOG4J2-679: ignore mkdirs() result, instead check if resulting directory exists to avoid race condition.

Modified:
    logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
    logging/log4j/log4j2/trunk/src/changes/changes.xml

Modified: logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java?rev=1617298&r1=1617297&r2=1617298&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java Mon Aug 11 14:38:02 2014
@@ -77,7 +77,11 @@ public class FileRenameAction extends Ab
         if (renameEmptyFiles || source.length() > 0) {
             final File parent = destination.getParentFile();
             if (parent != null && !parent.exists()) {
-                if (!parent.mkdirs()) {
+                // LOG4J2-679: ignore mkdirs() result: in multithreaded scenarios,
+                // if one thread succeeds the other thread returns false
+                // even though directories have been created. Check if dir exists instead.
+                parent.mkdirs();
+                if (!parent.exists()) {
                     LOGGER.error("Unable to create directory {}", parent.getAbsolutePath());
                     return false;
                 }

Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1617298&r1=1617297&r2=1617298&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Mon Aug 11 14:38:02 2014
@@ -22,6 +22,9 @@
   </properties>
   <body>
     <release version="2.0.2" date="2014-0?-??" description="Bug fixes and enhancements">
+      <action issue="LOG4J2-679" dev="rpopma" type="fix">
+        Resolved race condition that caused log file rotation to fail with error: "Unable to create directory ..."
+      </action>
       <action issue="LOG4J2-726" dev="rpopma" type="fix">
         Prevent application from hanging when PatternLayout configuration has opening '{' but no closing '}'.
       </action>