From 931383fb0a6bfa8be19e27c688953adaf446b95c Mon Sep 17 00:00:00 2001 From: "benjamin.jaton@gmail.com" Date: Mon, 14 Aug 2017 15:21:26 -0700 Subject: [PATCH 1/3] Mark FileRenameAction as successful when using alternative ways to move a file. --- .../log4j/core/appender/rolling/action/FileRenameAction.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java index da3f3d24c37..a6d9bf86361 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java @@ -124,11 +124,12 @@ public static boolean execute(final File source, final File destination, final b } catch (final IOException exMove) { LOGGER.error("Unable to move file {} to {}: {} {}", source.getAbsolutePath(), destination.getAbsolutePath(), exMove.getClass().getName(), exMove.getMessage()); - final boolean result = source.renameTo(destination); + boolean result = source.renameTo(destination); if (!result) { try { Files.copy(Paths.get(source.getAbsolutePath()), Paths.get(destination.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING); + result = true; try { Files.delete(Paths.get(source.getAbsolutePath())); LOGGER.trace("Renamed file {} to {} using copy and delete", From 4f2df221c96d047dd26f437b0d56ca4919def943 Mon Sep 17 00:00:00 2001 From: Benjamin Jaton Date: Tue, 15 Aug 2017 08:44:26 -0700 Subject: [PATCH 2/3] FileRenameAction marked as successful only if the delete of the source file is successful. --- .../log4j/core/appender/rolling/action/FileRenameAction.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java index a6d9bf86361..7fad234c176 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java @@ -129,9 +129,9 @@ public static boolean execute(final File source, final File destination, final b try { Files.copy(Paths.get(source.getAbsolutePath()), Paths.get(destination.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING); - result = true; try { Files.delete(Paths.get(source.getAbsolutePath())); + result = true; LOGGER.trace("Renamed file {} to {} using copy and delete", source.getAbsolutePath(), destination.getAbsolutePath()); } catch (final IOException exDelete) { @@ -139,6 +139,7 @@ public static boolean execute(final File source, final File destination, final b exDelete.getClass().getName(), exDelete.getMessage()); try { new PrintWriter(source.getAbsolutePath()).close(); + result = true; LOGGER.trace("Renamed file {} to {} with copy and truncation", source.getAbsolutePath(), destination.getAbsolutePath()); } catch (final IOException exOwerwrite) { @@ -180,3 +181,4 @@ public String toString() { } } + From f42b27fa5e2b5b3092960cb6dcabd8f8723b8b8c Mon Sep 17 00:00:00 2001 From: Benjamin Jaton Date: Tue, 15 Aug 2017 16:10:46 -0700 Subject: [PATCH 3/3] Fail FileRenameAction when truncation is used --- .../log4j/core/appender/rolling/action/FileRenameAction.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java index 7fad234c176..25383065f09 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java @@ -139,7 +139,6 @@ public static boolean execute(final File source, final File destination, final b exDelete.getClass().getName(), exDelete.getMessage()); try { new PrintWriter(source.getAbsolutePath()).close(); - result = true; LOGGER.trace("Renamed file {} to {} with copy and truncation", source.getAbsolutePath(), destination.getAbsolutePath()); } catch (final IOException exOwerwrite) { @@ -181,4 +180,3 @@ public String toString() { } } -