如何在logback.xml中使用Spring应用程序属性

时间:2018-12-12 08:16:31

标签: spring spring-boot logback spring-logback

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

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

@Html.DropDownListFor(model => model.RoomId, Model.RoomList, "-- Select Room --", new { @class = "form-control" })

@Html.DropDownListFor(model => model.CustomerId, Model.CustomerList, "-- Select Customer --", new { @class = "form-control" })

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

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

启动我的应用程序时,出现以下错误:

  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,但这会带来其他问题。

2 个答案:

答案 0 :(得分:1)

尝试使用springProperty

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

    <appender name="consoleAppender" class="${my_appender}"/>
</configuration>

答案 1 :(得分:1)

根据官方docs

  

由于标准logback.xml配置文件加载太早,因此无法在其中使用扩展名。您需要使用logback-spring.xml或定义logging.config属性。

为此,Spring提供了<springProperty>标签。

  

标签使您可以从Spring Environment中公开属性,以在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>