I have been trying to fix certain (randomly?) failing tests on both master and release-2.x; RollingDirectSizeTimeNewDirectoryTest, RollingDirectTimeNewDirectoryTest, etc. to name a few. I suspect the hardwiring to the system clock causes this strange behaviour. Consider the following RollingDirectTimeNewDirectoryTest failure on Linux build of CI run 1030228241 <https://github.com/apache/logging-log4j2/runs/1030228241>:
2020-08-26T07:14:20.6935332Z [INFO] Running org.apache.logging.log4j.core.appender.rolling.RollingDirectTimeNewDirectoryTest 2020-08-26T07:14:22.6924028Z log directory (target/rolling-folder-direct) contents: 2020-08-26T07:14:22.7012928Z -> target/rolling-folder-direct (4096) 2020-08-26T07:14:22.7016056Z -> target/rolling-folder-direct/08-26-20-07-14-21 (4096) 2020-08-26T07:14:22.7016745Z -> target/rolling-folder-direct/08-26-20-07-14-21/processor.log (106000) 2020-08-26T07:14:22.7019114Z -> target/rolling-folder-direct/08-26-20-07-14-22 (4096) 2020-08-26T07:14:22.7019730Z -> target/rolling-folder-direct/08-26-20-07-14-22/processor.log (106000) 2020-08-26T07:14:22.7020266Z -> target/rolling-folder-direct/08-26-20-07-14-20 (4096) 2020-08-26T07:14:22.7020811Z total file count: 6 2020-08-26T07:14:22.7266674Z [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.023 s <<< FAILURE! - in org.apache.logging.log4j.core.appender.rolling.RollingDirectTimeNewDirectoryTest 2020-08-26T07:14:22.7271597Z [ERROR] streamClosedError Time elapsed: 2.016 s <<< FAILURE! 2020-08-26T07:14:22.7274708Z java.lang.AssertionError: check failure 2020-08-26T07:14:22.7283417Z at org.apache.logging.log4j.core.appender.rolling.RollingDirectTimeNewDirect ... 2020-08-26T07:14:22.7561864Z Caused by: java.lang.AssertionError: empty folder: target/rolling-folder-direct/08-26-20-07-14-20 2020-08-26T07:14:22.7562796Z at org.junit.Assert.fail(Assert.java:89) 2020-08-26T07:14:22.7563709Z at org.junit.Assert.assertTrue(Assert.java:42) 2020-08-26T07:14:22.7564629Z at org.apache.logging.log4j.core.appender.rolling.RollingDirectTimeNewDirectoryTest.streamClosedError(RollingDirectTimeNewDirectoryTest.java:80) 2020-08-26T07:14:22.7565648Z ... 49 more See the rolling-folder-direct directory dump at the top and notice the empty 08-26-20-07-14-20 folder, hence the failure? I think we can resolve such flickering behaviours by throwing around more Thread.sleep() calls, though I doubt if this is the right way to go. In my personal RotatingFileOutputStream project <https://github.com/vy/rotating-fos>, the employed clock is configurable. Via a custom mocked clock, I can implement tests without reaching out to system time or Thread.sleep(). Is such a thing possible in Log4j roller as well?