Перенаправьте JUL на Log4J2 в Websphere WebApp - PullRequest
0 голосов
/ 25 апреля 2019

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

Я уже задавал вопросы по этой теме здесь и здесь .Сначала я попытался использовать подход , предложенный apache, установив java util LogManager на тот, который предоставлен log4j-jul jar.Как видно из первого связанного вопроса, это не очень работает в моем случае использования.Поскольку приложение запускается как WebApp на сервере Websphere, на самом деле момент загрузки log4j-jul jar отсутствует, и я могу поменять LogManager, но перед любыми вызовами java util Logger или LogManager сделаны потому, что Сервер использует эти операторы журнала перед загрузкой jar и настраивает мои параметры Log4J2.

Затем я попытался использовать Log4jBridgeHandler, как предложено во втором связанном вопросе.Сначала я подумал, что это сработало, так как мои тестовые java-утилиты Log были напечатаны с моим точным форматом Log4j2.

У меня действительно есть две проблемы с этим подходом: я не могу использовать способ установки обработчика иуровень в logging.properties, поскольку он просто не имеет никакого эффекта (я установил путь к файлу logging.properties через системное свойство java.util.logging.config.file в файле jvm.options).

Что помогло, так это использованиеinstall() метод Log4jBridgeHandler, так как это позволило печатать журналы утилит java в моем формате Log4j2.Но созданный java util Logger не имел требуемого уровня ALL, а был установлен по умолчанию INFO, несмотря на то, что у корневого регистратора был правильный уровень.Из-за этого защита по умолчанию в функциях ведения журнала утилит java не позволяла войти в мост, так что я никогда не смогу занести что-либо ниже уровня INFO.

Так что да, я не в курсе.Я сделал что-то не так?Должно ли то, что я сделал, сработать?

1 Ответ

1 голос
/ 25 апреля 2019

Я сделал что-то не так? Должно ли то, что я сделал, сработало?

Log4jBridgeHandler выполняет распространение уровня от LOG4J2 до JUL. Попробуйте добавить запись logger в ваш log4j2.xml, чтобы установить уровень вашего именованного logger.

В ваших logging.properties вы можете отключить это с помощью:

org.apache.logging.log4j.jul.Log4jBridgeHandler.propagateLevels=false
...