java - 在不重新部署的情况下更新 logback 配置

标签 java properties logback redeploy

想法是在不重新部署的情况下改变 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/

相关文章:

java - 枚举每五张牌的组合

java - Mockiito返回值错误?

.net - VB.NET 中只读集合属性的集合初始值设定项?

java - 使用 slf4j/logback 访问历史日志消息

Logback 不继承 root appenders

java - 通过java自动化任务

java - 将 int 数组传递给方法

javafx - 从 getValue() 和 setValue() 函数之外的 Delegated Property 中获取 KProperty 信息

.NET WPF XAML "BindingExpression path error: ... property not found"

java - 如何确定 Logback 实际使用的日志配置源是什么?