If a cleaner thread is created it must be stopped when the parent SiftingAppender is closed. See for example AsyncAppenderBase for an example of thread management. I am assuming the individualExecutors option with executorService.schedule() path is dropped. Coming back to the original question, I still don't understand how there can be many stale appenders while no logging events make it to the SiftingAppender. Unless I am missing something, as soon as a single event makes it through all stale appenders are closed. Correct? |