Ответ 1
Попробуйте следующее:
org.apache.log4j.LogManager.shutdown();
Однако проблема, которую вы испытываете, странна и не должна происходить. Какую версию JVM, контейнера, log4j вы используете?
Мое веб-приложение на основе сервлета иногда не может закрыть файлы журнала Log4j при повторном развертывании, утечка в утечку дескриптора файла и иногда приводит к смерти, связанной с сервлетом, из "слишком большого количества открытых файлов".
У меня есть ContextListener, что я должен вставить в свой контекстDestroyed(), чтобы сообщить log4j о завершении и выпуске всех ресурсов?
Быстрый просмотр над javadocs показал класс Hierachery с методом shutdown(). Я понятия не имею, как на самом деле получить текущее Hierachery, и javadoc утверждает, что этот класс не имеет компонентов, обслуживаемых пользователем внутри:)
Попробуйте следующее:
org.apache.log4j.LogManager.shutdown();
Однако проблема, которую вы испытываете, странна и не должна происходить. Какую версию JVM, контейнера, log4j вы используете?
У меня была такая же проблема, но для моего решения потребовалось два шага:
Во-первых, мне пришлось вызвать LogManager.shutdown()
из метода сервлей destroy()
.
Затем мне пришлось исправить метод close()
нашей собственной реализации Appender (который является подклассом AppenderSkeleton
), так что он правильно закрывает appenders из getAllAppenders()
.