Log4j JDK Logging адаптер: применить системное свойство LogManager в конце процесса запуска - PullRequest
2 голосов
/ 24 апреля 2019

У меня есть WebSphere Application Server, на котором работает WebApp. Я запускаю Сервер из Eclipse. Основной каркас журналирования в этом приложении - log4j2, но есть некоторые сторонние библиотеки, которые используют java.util.logging. Я хочу перенаправить эти журналы в log4j2, чтобы он использовал мои фильтры, формат журналов и т. Д. Для этого я могу использовать Log4j JDK Logging Adapter .

Обычно можно установить системное свойство -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager, например, в jvm.options. Проблема в том, что я не могу заставить это решение работать, потому что сервер использует ведение журнала java util задолго до загрузки моих свойств log4j2 и до загрузки jar log4j-jul адаптера. Это приводит к немедленному выбрасыванию исключения после попытки запуска сервера (см. Мой другой вопрос ).

Так что я подумал, что, возможно, можно установить LogManager на значение из банки log4j-jul позже в процессе запуска, когда файл jar загружен и мои свойства log4j2 загружены?

1 Ответ

2 голосов
/ 24 апреля 2019

Как только загружается java.util.logging.LogManager (около строки 174), он назначает экземпляр синглтона.Нет возможности заменить его после запуска загрузки.

Установка org.apache.logging.log4j.jul.Log4jBridgeHandler должна помочь.Вы должны иметь возможность добавить этот обработчик к корневому логгеру, используя LogManager по умолчанию с WebSphere .

Обычно это можно сделать, добавив в ваш logging.properties:

следующее1012 *

За LOG4J2-2025 это исправлено в LOG4J2 версии 3.0.0.По состоянию на 25 апреля 2019 года, похоже, это будущий выпуск.Для LOG4J2 2.3 вы можете использовать log4j2-Java6-extras или загрузить log4j2-Java6-extras из Maven .

...