使用SLF4J发送/重定向/路由java.util.logging.Logger(JUL)到Logback?

Zom*_*ies 21 java logging slf4j

是否可以进行典型调用java.util.logging.Logger并使用SLF4J将其路由到Logback?这将是很好的,因为我不必逐行重构旧的jul代码.

EG,说我们有这条线:

private static Logger logger = Logger.getLogger(MahClass.class.getName());
//...
logger.info("blah blah blah");
Run Code Online (Sandbox Code Playgroud)

将其配置为通过SLF4J调用会很好.

Dej*_*vic 43

这很容易,而不是性能问题.

SLF4J手册中记录了两种方法.Javadocs中也有精确的例子

将jul-to-slf4j.jar添加到类路径中.或者通过maven依赖:

<dependency>
    <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您没有logging.properties(对于java.util.logging),请将其添加到您的引导代码中:

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Run Code Online (Sandbox Code Playgroud)

如果您有logging.properties(并希望保留它),请将其添加到其中:

handlers = org.slf4j.bridge.SLF4JBridgeHandler
Run Code Online (Sandbox Code Playgroud)

为了避免性能损失,请将此contextListener添加到logback.xml(从logback版本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>
Run Code Online (Sandbox Code Playgroud)