如何检查带有Reload4J的SLF4J是否已初始化?

问题描述 投票:0回答:1

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

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

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

java logging log4j slf4j reload4j
1个回答
0
投票

SLF4J 是一个通用日志记录 API,由各种日志记录框架(例如 Logback、Log4j2 等)实现,因此虽然答案稍微取决于您使用的实现,但所有现代日志记录实现都不需要“初始化”;它们一经声明即可使用,因此您的解决方案是:

private static boolean isLoggerInitialized() {
    return true;
}

如果您使用 Spring 入门库,则默认日志记录库是 Logback。您可以通过在类路径中包含不同的 Slf4j 兼容日志库(所有主要的日志库都兼容)来选择其他内容。至于“初始化”,只要你选择主流,选择什么都没关系。

我建议使用 Lombok 日志注释之一,而不是对记录器的声明进行编码,这样你的代码就变成了:

@Slf4j
public class MyClass {

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

}

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

© www.soinside.com 2019 - 2024. All rights reserved.