У меня есть консольное приложение Spring, использующее Logback. Все свойства (как для приложения, так и для журнала) вытесняются в стандартный файл application.properties в пути к классам. Эти свойства хорошо подбираются в самом приложении, но не отображаются в файле logback.xml. Похоже, что logback.xml обрабатывается до Spring запускается Boot, поэтому EL-заполнители не обрабатываются.
Используя FileNamePattern в качестве примера, в application.properties у меня есть что-то вроде этого:
log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
а в logback.xml у меня будет следующее:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.logDirectory}${log.filePattern}.log
</FileNamePattern>
</rollingPolicy>
При запуске приложения я увижу такие ошибки, как:
ERROR in [email protected]:25 -
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken
Подобный код отлично работает в других приложениях Spring (not Spring Boot), поэтому мне интересно, если Spring Загрузка ведет себя немного по-другому.
Решение:
Спасибо за ответ @Gary! Полезно знать о различии между переменными Spring EL и Logback... Я предположил, что это был Spring, который отвечал за разбор этих переменных для меня. У меня сделал элемент, но это заставило меня задуматься.
Мой файл application.properties находился за пределами банки, поэтому Logback не знал, где его найти. Сохраняя мои свойства Spring в моем внешнем файле application.properties, перемещая связанные с журналом свойства в файл application-internal.properties(расположенный внутри) и указывая на "Logback" на , что файл (<property resource="application-internal.properties" />
) получил все, что ожидалось!