【问题标题】:Externalize logback-spring.xml programmatically以编程方式外部化 logback-spring.xml
【发布时间】:2017-11-11 13:19:54
【问题描述】:

我的application.properties 以编程方式加载 使用PropertyPlaceholderConfigurer。所以在application.properties中设置logging.config(例如:logging.config=file:/home/dev-01/conf/logback.xml

application.properties 中将不起作用,因为日志记录发生在生命周期的早期,因此无法从application.properties 读取值。

我需要将logback.xml 外部化,因为需要根据环境配置属性值。如果我可以将其外部化,则可以通过支持/操作进行管理,而无需开发人员干预。此外,无需从application.properties 重定向即可轻松维护。这意味着我可以在logback.xml 文件本身中设置属性值。

我看到了在启动期间添加 VM 选项的解决方案。我还没有尝试过,但我只是想知道我是否可以通过编程方式加载logback.xml(类似于我的application.properties)。

【问题讨论】:

  • Spring-boot 自动在你的类路径中搜索logback.xmllogback-spring.xml 文件并在启动时加载它。不需要在 app.props 中设置 logging.config 属性。
  • @lazarov 我需要从外部路径加载 logback.xml 或 logback-spring.xml。

标签: java spring spring-boot logback


【解决方案1】:

我使用这样的配置来实现:

<configuration scan="true" scanPeriod="10 seconds" debug="false">
    <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
    <include file="${CONFDIR}/config/logback-config.xml" />
</configuration>

然后您在该位置放置另一个 logback 配置,对该文件的更改将每 10 秒刷新一次

【讨论】:

  • 我认为应该设置为解决方案,它解决了我的问题。我所做的唯一细微更改是设置 而不是 因为 ${CONFDIR}在我的项目中没有定义。
【解决方案2】:

以编程方式加载logback.xml 似乎不是一个可行的解决方案。我的情况是application.properties 以编程方式加载(从外部路径),因此在application.properties 文件中设置logging.config 属性将不起作用。请注意,它使用类路径中的默认 application.properties 工作。我认为最务实的做法是通过-Dlogging.config=/[some-path]/logback.xml。此选项适用于我并在不重新部署 jar 文件的情况下更新日志记录级别(用于调试目的)。

将 logback.xml 配置 scan 设置为 true 将在 logback.xml 更新时刷新设置。

<configuration debug="true" scan="true">
  ...
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多