来自阅读 log4j 2 documentation如果适当的配置文件在类路径中,则预计将加载配置。但我需要确定配置文件是否已正确处理。有没有一种方法可以验证我期望加载的配置文件是否确实找到并成功加载了?
我正在编写将被其他开发人员使用的代码,可能是我们正在编写的库中不可或缺的 log4j 2 未正确配置的情况,因为该文件不在类路径中或配置错误。如果 log4j 2 没有正确配置,那么我必须停止对我们的库的进一步处理,它必须吐出重大错误并且必须对此大做文章。我不能让代码继续。所以最重要的是,我需要知道 log4j 2 正确处理了预期的配置文件。
此外,我更愿意使用 log4j 2 API 而不是 Core 库,但如果 Core 是唯一的方法,那就这样吧。
最佳答案
您可以仅使用 API 进行一些验证:
您可以使用 StatusLogger
注册一个 StatusListener
。 Log4J 在内部使用 StatusLogger 来记录 Log4J 内部的详细信息。大多数内部日志记录都与配置有关。
例如:
public class HaltingStatusListener implements StatusListener {
public Level getStatusLevel() {
return Level.ERROR;
}
public void log(StatusData data) {
throw new BigDealException("Internal log4j error detected: "
+ data.getMessage());
}
}
但这可能不足以满足您的需求。 您可以检查的另一件事:
LoggerContext context = LogManager.getContext();
if (context instanceof SimpleLoggerContext) {
throw new BigDealException(
"Log4j did not find config file & uses default setup");
}
如果您想了解更多细节并验证 appenders/loggers 等,您将需要使用核心类。在这种情况下,请向 log4j-user 邮件列表发送消息,让其他团队成员参与进来。
更新: Log4J 团队目前假设 Log4J 初始化失败不严重,不应停止应用程序。如果例如未找到核心 jar 或未找到配置文件,您可以要求 log4j 停止应用程序(抛出异常)的增强功能。您可以为此提出 Jira 票证或在邮件列表中询问。
关于java - 如何以编程方式验证 log4j 2 是否已正确配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747875/