log4j 如何检查SLF4J是否已初始化?

lg40wkob  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(114)

我们正在从普通的Log4J(使用reload4j)切换到使用SLF4J。在一段代码中,我们检查日志框架是否初始化。该检查背后的目标是,在记录系统初始化之前,如果需要记录某些内容,则可以回退到打印到System.err。

private static boolean isLoggerInitialized() {
    return LOGGER.getParent().getAllAppenders().hasMoreElements();
}

这是不可能的SLF4J了。因此,我正在寻找一种替代方法来检查SLF4J的初始化状态。

n3h0vuf2

n3h0vuf21#

SLF 4J是一个通用的日志记录API,由各种日志记录框架实现(例如Logback,Log4j 2等),因此,尽管答案稍微取决于您使用的实现,但所有现代日志记录实现都不需要“初始化”;它们在声明后就可以使用了,所以你的解决方案是:

private static boolean isLoggerInitialized() {
    return true;
}

如果您使用的是Spring starter libraries,默认的logging libraries是Logback。你可以选择其他的东西,包括一个不同的Slf 4j兼容日志库(所有主要的都是兼容的)在你的类路径。至于“初始化”,如果你选择一个主流的,你选择什么并不重要。
与其编写日志的声明,我建议使用Lombok logging annotations之一,这样代码就变得简单了:

@Slf4j
public class MyClass {

    public someMethod() {
        log.info("Hello world");
    }

}

log字段的声明已经为您完成(并且立即可以使用)。

相关问题