Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -224,4 +224,20 @@ void testRolloverOfDeletedFile() throws IOException {
}
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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -910,23 +910,32 @@ public RollingFileManager createManager(final String name, final FactoryData dat
}
}

private static long initialFileTime(final File file) {
static long initialFileTime(final File file) {
final Path path = file.toPath();
if (Files.exists(path)) {
try {
final BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
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> {
Expand Down
Loading