【问题标题】:Update logback configuratioin without redeploy更新 logback 配置而不重新部署
【发布时间】:2012-10-21 01:42:49
【问题描述】:

想法是能够在不重新部署的情况下更改 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 配置的最佳方法是什么?有什么机制可以实现吗?

upd:很少进行更改。但应尽快应用它们。性能也很重要。

【问题讨论】:

  • 您不能以编程方式对 logback.xml 文件进行一些虚拟更改,以便重新加载它吗?喜欢在文件末尾添加和删除空行吗?
  • @rolve 我考虑过这样的工作。但我希望必须有更方便的方法来做到这一点。
  • 感谢指针@error1009。我使用了您的建议,但在运行 ci.autoConfig(); 之前使用 System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, myNewLobackXmlFile.getPath()) 明确提供文件

标签: java properties logback redeploy


【解决方案1】:

我设法通过这样做重新加载它:

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
ContextInitializer ci = new ContextInitializer(loggerContext);
ci.autoConfig();

在我的用例中,我这样做是为了向上下文添加一些属性:

loggerContext.putProperty("logDirectory", getLogDirectory().getAbsolutePath());

在自动配置之前。

从属性文件中读取属性也应该可以工作。

【讨论】:

  • 遗憾的是,这需要应用程序代码知道日志记录的实现而不是接口,因为 LoggerContext 是一个 logback 类。当然,这是假设海报使用 slf4j 作为日志外观,如推荐的那样。
  • 所以你建议检查属性文件的变化。如果属性被更改并重新加载配置?它应该可以工作,但我认为这对性能不利。
【解决方案2】:

也许命令“touch”在属性设置后对虚构的文件修改很有用。

【讨论】:

    【解决方案3】:

    经过一些比较,我认为将 logback.xml 放在耳边会更容易、更舒服。 可以通过在服务器配置中指定系统属性 logback.configurationFile 来实现。 为了让人们更方便地进行编辑,我计划在文件的开头定义一些属性。就这样

    <property name="consolePattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    

    然后在配置中使用它们

    <pattern>${consolePattern}</pattern>
    

    它将处理动态变化的问题,并且几乎是用户友好的))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多