There is a problem in the function org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy.scheduleNext().
I got out of file handles errors despite of setting IdlePurgePolicy. I did some digging I believe following is the cause
If the createTime is Long.MAX_VALUE, task is never scheduled. However function org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy.update(String, LogEvent) checks if the future is not null before deciding to schedule.
After appendersUsage becomes empty first time, appenders keep piling up.
I believe fix will be to set future to null in the function scheduleNext in the else part of the condition where it checks for createTime