想法是在不重新部署的情况下改变 logback 配置。 项目中使用了slf4j和logback。 logback.xml 文件在耳中,但它从放在耳外的属性文件中读取一些属性。 类似的东西:
<configuration scan="true" scanPeriod="5 seconds">
<property file="${logconfig}"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${logback.consolePattern}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
问题是扫描会检查 logback.xml 是否已更改(并且文件始终相同)。这就是为什么更改属性文件中的值不会更改 logback 的配置。更改仅在重新部署后应用。
那么在不重新部署的情况下修改 logback 配置的最佳方法是什么?是否有某种机制可以实现它?
更新:很少会进行更改。但应尽快应用。性能也很重要。
最佳答案
我设法通过这样做重新加载它:
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();
在我的用例中,我这样做是为了向上下文添加一些属性:
loggerContext.putProperty("logDirectory", getLogDirectory().getAbsolutePath());
在自动配置之前。
从属性文件中读取属性也应该有效。
关于java - 在不重新部署的情况下更新 logback 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160659/