Отправить / перенаправить / route java.util.logging.Logger (JUL) для выхода с использованием SLF4J? - PullRequest
21 голосов
/ 16 мая 2011

Можно ли сделать типичный вызов java.util.logging.Logger и направить его в Logback с помощью SLF4J? Это было бы неплохо, поскольку мне не пришлось бы перестраивать старый код jul построчно.

EG, скажем, у нас есть эта строка:

private static Logger logger = Logger.getLogger(MahClass.class.getName());
//...
logger.info("blah blah blah");

Было бы неплохо настроить это для вызова через SLF4J.

1 Ответ

41 голосов
/ 05 декабря 2013

Это очень просто и больше не является проблемой производительности.

В руководстве SLF4J описаны два способа. Есть также точные примеры в Javadocs

Добавьте jul-to-slf4j.jar в ваш путь к классам. Или через зависимость Maven:

<dependency>
    <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.0</version>
</dependency>

Если у вас нет logging.properties (для java.util.logging), добавьте его в код начальной загрузки:

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();

Если у вас есть logging.properties (и вы хотите сохранить его), добавьте в него следующее:

handlers = org.slf4j.bridge.SLF4JBridgeHandler

Чтобы избежать снижения производительности, добавьте этот contextListener в logback.xml (начиная с версии 0.9.25 logback):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <!-- reset all previous level configurations of all j.u.l. loggers -->
        <resetJUL>true</resetJUL>
    </contextListener> 

    ...

</configuration>
...