This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch release/2.25.2 in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 01d5226b402e11a98ab70cb44e01d1f57612e7cd Author: Niklas Keller <[email protected]> AuthorDate: Mon Sep 1 10:40:11 2025 +0200 Round `initialTime` in `RollingFileManager` (#3872) Co-authored-by: Volkan Yazıcı <[email protected]> --- .../appender/rolling/RollingFileManagerTest.java | 16 ++++++++++++++++ .../core/appender/rolling/RollingFileManager.java | 21 +++++++++++++++------ .../3872_fix_RollingFileManager_initialTime.xml | 13 +++++++++++++ 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManagerTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManagerTest.java index dfa94c3ffe..69c52170a7 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManagerTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManagerTest.java @@ -224,4 +224,20 @@ class RollingFileManagerTest { } assertEquals(testContent, new String(Files.readAllBytes(file.toPath()), StandardCharsets.US_ASCII)); } + + @Test + @Issue("https://github.com/apache/logging-log4j2/issues/3068") + void testInitialTimeRounded() throws IOException { + assertEquals(1755031147000L, RollingFileManager.alignMillisToSecond(1755031147000L)); + assertEquals(1755031147000L, RollingFileManager.alignMillisToSecond(1755031147123L)); + assertEquals(1755031147000L, RollingFileManager.alignMillisToSecond(1755031147499L)); + assertEquals(1755031148000L, RollingFileManager.alignMillisToSecond(1755031147500L)); + assertEquals(1755031148000L, RollingFileManager.alignMillisToSecond(1755031147999L)); + assertEquals(1755031148000L, RollingFileManager.alignMillisToSecond(1755031148000L)); + + final File file = File.createTempFile("testFile", "log"); + file.deleteOnExit(); + + assertEquals(0, RollingFileManager.initialFileTime(file) % 1000); + } } diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java index b033f5785e..7aec034036 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java @@ -910,7 +910,7 @@ public class RollingFileManager extends FileManager { } } - private static long initialFileTime(final File file) { + static long initialFileTime(final File file) { final Path path = file.toPath(); if (Files.exists(path)) { try { @@ -918,15 +918,24 @@ public class RollingFileManager extends FileManager { final FileTime fileTime = attrs.creationTime(); if (fileTime.compareTo(EPOCH) > 0) { LOGGER.debug("Returning file creation time for {}", file.getAbsolutePath()); - return fileTime.toMillis(); + + return alignMillisToSecond(fileTime.toMillis()); } - LOGGER.info("Unable to obtain file creation time for " + file.getAbsolutePath()); + LOGGER.info("Unable to obtain file creation time for {}", file.getAbsolutePath()); } catch (final Exception ex) { - LOGGER.info("Unable to calculate file creation time for " + file.getAbsolutePath() + ": " - + ex.getMessage()); + LOGGER.info( + "Unable to calculate file creation time for {}: {}", file.getAbsolutePath(), ex.getMessage()); } } - return file.lastModified(); + + return alignMillisToSecond(file.lastModified()); + } + + /** + * @see <a href="https://github.com/apache/logging-log4j2/issues/3068">Issue #3068</a> + */ + static long alignMillisToSecond(long millis) { + return Math.round(millis / 1000d) * 1000; } private static class EmptyQueue extends ArrayBlockingQueue<Runnable> { diff --git a/src/changelog/.2.x.x/3872_fix_RollingFileManager_initialTime.xml b/src/changelog/.2.x.x/3872_fix_RollingFileManager_initialTime.xml new file mode 100644 index 0000000000..ba6fbd9129 --- /dev/null +++ b/src/changelog/.2.x.x/3872_fix_RollingFileManager_initialTime.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entry xmlns="https://logging.apache.org/xml/ns" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + https://logging.apache.org/xml/ns + https://logging.apache.org/xml/ns/log4j-changelog-0.xsd" + type="fixed"> + <issue id="3068" link="https://github.com/apache/logging-log4j2/issues/3068"/> + <issue id="3872" link="https://github.com/apache/logging-log4j2/pull/3872"/> + <description format="asciidoc"> + Discard the sub-second part while obtaining the initial time (i.e., creation time) of a file in `RollingFileManager` + </description> +</entry>
