Как использовать свойства приложений 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>