2015-12-26 3 views
2

Обычная инструкция для преодоления Юль к SLF4J добавляет к pom.xml:Что сказывается на использовании jul-to-slf4j несколько раз в контейнере Java EE/Spring?

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
    <version>${slf4j.version}</version> 
</dependency> 

добавляя к logback.xml:

<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/> 

добавление к пружине фасоли:

<bean class="org.slf4j.bridge.SLF4JBridgeHandler" init-method="install"/> 

Заметьте, что я Дон» т включают:

<bean class="org.slf4j.bridge.SLF4JBridgeHandler" 
     init-method="removeHandlersForRootLogger"/> 

т.к. это remove Tomcat's/JBoss's etc logging registrations. Одна из причин, по которой контейнеры регистрируются в JUL - перенаправить вывод консоли в файл, но я не уверен, что это правда.

Ceki (автор Log4j, SLF4J и журнал) doesn't recommend installingSLF4JBridgeHandler размножение раз. Но он не объяснил, почему ...

Что происходит, если два регистра webapp SLF4JBridgeHandler.install() одновременно в одном Tomcat? Они конфликтуют? Можно ли украсть все сообщения журнала другими?

реализация JAXB-RS от com.sun.jersey.* использует Юля протоколирование и я хочу переадресовать заявление журнала для каждого приложения вместо системы catalina.log

Другой странная рекомендация поставить jul-to-slf4j.jar в lib/ реж контейнера и не включают в себя с приложением. Зачем?

ССЫЛКА НА ТЕМЕ:

ответ

0

открыть запрос для улучшения документации: http://jira.qos.ch/browse/SLF4J-351

Response является:

There is one j.u.l.LogManager instance per JVM. 
Thus, any manipulation of it impacts the whole JVM. 

Таким образом, в контейнерном многопользовательской среде приложения июлю к SLF4J должен быть один экземпляр в виртуальной машины Java и загружаются из системных классов или получить трудно объяснить проблемы.

2

Я бы сказал, что ваш ответ неверен (по крайней мере, последняя его часть).

(Мой ответ на самом деле не о влиянии вызова SLF4JBridgeHandler.install() несколько раз, но охватывает сценарию вы, вероятно, хотите достичь -. Использование jul-to-slf4j в течение нескольких приложений в Tomcat)

Прежде всего вам должны ознакомиться с Tomcat's classloaders и как они используются. Основная идея заключается в том, что каждое приложение имеет свой собственный загрузчик классов, поэтому может содержать свой собственный jul-to-slf4j.jar.

Далее в строке JULI, реализация регистрации Tomcat. Присмотритесь на раздел, который говорит о пользовательских LogManager:

Ключевой компонент существует обычай реализации LogManager, которая в курсе различных веб-приложений, работающих на сервере Tomcat (и их различных загрузчиков классов). Он поддерживает частные протоколы регистрации приложений для каждого приложения .

Теперь давайте посмотрим на исходный код jul-to-slf4j. Этот простой, но очень мощный класс делает ничего из коробки. Чтобы включить мост, вы должны подключить SLF4JBridgeHandler к корневому журналу.Ceki дал нам два варианта:

  1. Вызов статического метода org.slf4j.bridge.SLF4JBridgeHandler.install().
  2. Указав ручку моста в файле logging.properties.

объявление 1) Процесс метод следующий код:

java.util.logging.LogManager.getLogManager().getLogger("").addHandler(new SLF4JBridgeHandler()); 

Но эй, мы внутри вселенной Tomcat, мы не хотим использовать эту уродливую java.util.logging.LogManager менеджер! Мы хотим, чтобы это улучшилось с Tomcat. Поэтому забудьте этот метод и не вызывайте его из Tomcat.

объявления 2) Вы помните, что LogManager enahnced Tomcat позволяет всем приложениям иметь для каждого приложения конфигураций лесозаготовительных правильно? И помните, что jul-to-slf4j можно было включить в пределах logging.properties файла?


Чтобы включить/выключить jul-to-slf4j мост в пределах объема одного приложения, запущенного на сервере Tomcat необходимо:

  1. Поместите jul-to-slf4j.jar в /app/WEB-INF/lib.
  2. Создайте logging.properties файл в пределах /app/WEB-INF/classes со следующим содержанием: handlers=org.slf4j.bridge.SLF4JBridgeHandler.

Я strugling с подобным вопросом в течение нескольких дней, и этот ответ охватывает одну часть моего исследования. Надеюсь, это поможет вам и другим людям настроить правильную среду с поддержкой SLF4J.

Смежные вопросы