【发布时间】:2012-03-08 08:58:06
【问题描述】:
我知道有一个 reloadDefaultConfiguration() jmx 操作,但是没有获取 MBean 的实例并调用此操作,是否有一个 Logback api 来重新加载默认配置(可选地指定日志配置文件路径)?
【问题讨论】:
我知道有一个 reloadDefaultConfiguration() jmx 操作,但是没有获取 MBean 的实例并调用此操作,是否有一个 Logback api 来重新加载默认配置(可选地指定日志配置文件路径)?
【问题讨论】:
这是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 可以做到这一点,那么提出 issue 怎么样?另外你知道 Logback 有一个内置的自动刷新功能吗?
【讨论】:
为此我使用了以下代码:
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);
}
【讨论】:
org.xml.sax.SAXParseException