一尘不染

JUL到SLF4J桥

java

我目前正在观察一个第三方库(即restfb)正在使用java.util.logging,即使我的logback.xml中没有配置SLF4J控制台附加程序,我也看到这些日志最终出现在STDOUT中。我的类路径中还有jul-
slf4j
桥。安装网桥时,jul-to-
slf4j网桥是否仅登录到由logback配置的附加程序,还是也登录到stdout?


阅读 358

收藏
2020-09-09

共1个答案

一尘不染

您需要致电SLF4JBridgeHandler.install()。您还需要在java.util.logging中的root记录器(以下摘录中的原因)上启用所有日志级别,并删除默认的控制台附加程序。

该处理程序会将jul日志记录重定向到SLF4J。但是,只有在jul中启用的日志将被重定向。例如,根据定义,如果调用jul
logger的日志语句禁用了该语句,则该语句将不会到达任何SLF4JBridgeHandler实例,并且无法重定向。

整个过程可以像这样完成

import java.util.logging.Logger;
import org.slf4j.bridge.SLF4JBridgeHandler;

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Logger.getLogger("").setLevel(Level.FINEST); // Root logger, for example.

出于性能方面的考虑,您可以将级别设置为高于最佳级别,但是如果不java.util.logging首先启用它们就无法打开这些日志(由于上面摘录中所述的原因)。

2020-09-09