我们正在从普通 Log4J(带有 reload4j)切换到使用 SLF4J。在一段代码中,我们检查日志框架是否已初始化。该检查背后的目标是回退到打印到 System.err,以防在记录系统初始化之前需要记录某些内容。
private static boolean isLoggerInitialized() {
return LOGGER.getParent().getAllAppenders().hasMoreElements();
}
这对于 SLF4J 来说是不可能的了。因此我正在寻找一种替代方法来检查 SLF4J 的初始化状态。
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
字段的声明已为您完成(并且可以立即使用)。