3

我正在尝试在 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,但这会产生其他问题。

4

2 回答 2

3

尝试使用 springProperty

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

    <appender name="consoleAppender" class="${my_appender}"/>
</configuration>
于 2018-12-12T08:35:42.973 回答
3

据官方介绍docs

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

为了解决这个问题,Spring 提供了<springProperty>标签。

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

<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>
于 2018-12-12T08:45:40.240 回答