Как использовать свойства приложений Spring в logback.xml

Я пытаюсь использовать значения свойств пружины в logback.xml.

Файл 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 типа [${appender-class}]. ch.qos.logback.core.util.DynamicClassLoadingException: не удалось создать экземпляр типа ${myapp.test.appender-class}

Что я делаю неправильно?

Примечание: я также попытался переименовать мой logback.xml в logback-spring.xml, но это создает другие проблемы.

2 ответа

Попробуйте использовать springProperty

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

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

По словам чиновника docs

Поскольку стандартный файл конфигурации logback.xml загружается слишком рано, в нем нельзя использовать расширения. Вам нужно либо использовать logback-spring.xml, либо определить свойство logging.config.

И чтобы справиться с этим, Spring предоставляет <springProperty> тег.

Тег позволяет вам выставлять свойства из среды Spring для использования в Logback. Это может быть полезно, если вы хотите получить доступ к значениям из файла application.properties в конфигурации Logback. Тег работает аналогично стандартному тегу 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>
Другие вопросы по тегам