web-dev-qa-db-ja.com

SLF4Jを使用してJava.util.logging.Logger(JUL)をLogbackに送信/リダイレクト/ルーティングしますか?

Java.util.logging.Loggerへの通常の呼び出しを行い、SLF4Jを使用してLogbackにルーティングすることは可能ですか?古いjulコードを1行ずつリファクタリングする必要がないので、これは素晴らしいことです。

EG、この行があるとしましょう:

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

SLF4Jを介して呼び出すようにこれを構成するとよいでしょう。

21
Zombies

これは非常に簡単で、パフォーマンスの問題ではなくなりました。

SLF4Jマニュアル に記載されている2つの方法があります。 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の場合)がない場合は、これをbootstrapコード:

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

Logging.propertiesがある(そしてそれを保持したい)場合は、これを追加します。

handlers = org.slf4j.bridge.SLF4JBridgeHandler

パフォーマンスの低下を回避するために、このcontextListenerをlogback.xmlに追加します(ログバックバージョン0.9.25以降)。

<?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>
44
Dejan Milosevic