如何以编程方式告诉 Logback 重新加载配置

2022-09-02 20:50:38

我知道有一个reloadDefaultConfiguration()jmx操作,但是如果没有获取MBean的实例并调用此操作,是否有Logback api来重新加载默认配置(可以选择指定日志配置文件路径)?


答案 1

这是以下各项的源代码:JMXConfigurator.reloadDefaultConfiguration()

public void reloadDefaultConfiguration() throws JoranException {
  ContextInitializer ci = new ContextInitializer(loggerContext);
  URL url = ci.findURLOfDefaultConfigurationFile(true);
  loggerContext.reset();
  ci.configureByResource(url);
}

在您需要的地方运行此代码怎么样?

唯一的问题是变量。您可以使用以下命令获取它:loggerContext

(LoggerContext)LoggerFactory.getILoggerFactory()

不幸的是,看起来没有精心设计的API来做到这一点,那么提出问题呢?另外,您是否知道Logback具有内置的自动刷新功能?


答案 2

为此,我使用了以下代码:

public static void reloadLogger() {
    LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();

    ContextInitializer ci = new ContextInitializer(loggerContext);
    URL url = ci.findURLOfDefaultConfigurationFile(true);

    try {
        JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(loggerContext);
        loggerContext.reset();
        configurator.doConfigure(url);
    } catch (JoranException je) {
        // StatusPrinter will handle this
    }
    StatusPrinter.printInCaseOfErrorsOrWarnings(loggerContext);
}

推荐