Send/redirect/route java.util.logging.Logger (JUL) to Logback using SLF4J?

2022-09-01 12:50:31

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

例如,假设我们有这条线:

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

最好将其配置为通过SLF4J进行调用。


答案 1

这很容易,不再是性能问题。

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();

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

handlers = org.slf4j.bridge.SLF4JBridgeHandler

为了避免性能损失,请将此上下文Listener添加到 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>

答案 2

推荐