【问题标题】:How to use Spring applications properies in logback.xml如何在 logback.xml 中使用 Spring 应用程序属性
【发布时间】:2018-12-12 08:16:31
【问题描述】:

我正在尝试在 logback.xml 中使用 spring 属性值。

文件 application-dev.properties(它是我的 jar 的一部分)包含以下属性:

myapp.test.appender-class=ch.qos.logback.core.ConsoleAppender

我在 logback.xml 中添加了以下内容:

<configuration scan="true" debug="true">
    <property resource="application-dev.properties" />
    <appender name="consoleAppender" class="${myapp.test.appender-class}">

当我的应用程序启动时,我收到以下错误:

ch.qos.logback.core.joran.action.AppenderAction 中的错误 - 不能 创建一个类型为 [${appender-class}] 的 Appender。 ch.qos.logback.core.util.DynamicClassLoadingException:未能 实例化类型 ${myapp.test.appender-class}

我做错了什么?

注意:我也尝试将我的 logback.xml 重命名为 logback-spring.xml,但这会产生其他问题。

【问题讨论】:

    标签: spring spring-boot logback spring-logback


    【解决方案1】:

    尝试使用 springProperty

    <configuration>
        <springProperty name="my_appender" source="myapp.test.appender-class"/>
    
        <appender name="consoleAppender" class="${my_appender}"/>
    </configuration>
    

    【讨论】:

    • 注意:使用 springProperty 还需要将 logback.xml 更改为 logback-spring.xml。我这样做了,得到了同样的错误:Could not create an Appender of type [${my_appender}]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ${my_appender}
    • logback 实现有可能不会为 class= 扩展一个表达式而不是一个类。其他属性是否被自动装配(如上面示例中的 level 或 remoteHost)?
    • 你是对的@Ermintar!该类不接受变量,但其他属性可以。很奇怪,因为值只是一个字符串。谢谢。
    【解决方案2】:

    据官方docs

    因为标准的 logback.xml 配置文件加载过早,不能在里面使用扩展。您需要使用 logback-spring.xml 或定义 logging.config 属性。

    为了解决这个问题,Spring 提供了&lt;springProperty&gt; 标签。

    该标签允许您从 Spring 环境中公开属性以在 Logback 中使用。如果您想在 Logback 配置中访问 application.properties 文件中的值,这样做会很有用。该标签的工作方式与 Logback 的标准标签类似。但是,您不是指定直接值,而是指定属性的来源(来自环境)。如果您需要将属性存储在本地范围以外的某个位置,则可以使用 scope 属性。

    <springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
    <appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
        <remoteHost>${fluentHost}</remoteHost>
        ...
    </appender>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2020-03-01
      相关资源
      最近更新 更多