Настройка:
Язык: Java
Приложение: приложение Spring Boot.
Проект: Maven
Ведение журнала: ведение журнала
Контейнер: (Jetty для разработки | Tomcat для производства)
Ситуация:
В нашем проекте у нас есть logback.xml в корне ресурсов. Этот файл должен иметь доступ к определенным свойствам приложения. В приведенном ниже примере нам нужно получить доступ к свойству logging.home.dir
, которое будет сохранено как LOGGER_HOME
.
Пример: logback.xml
<configuration>
<property name="LOGGER_HOME" value="${logging.home.dir}" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGGER_HOME}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- other setting -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- other setting -->
</encoder>
</appender>
</configuration>
Проблема:
Обычно для разработки можно использовать файл свойств приложения по умолчанию application.properties
для хранения всех необходимых свойств, но для производства этот файл является внешним.
Разработка
application.properties
logging.home.dir=temp/logs/
- Для разработки, пока файл
application.proerties
доступен в пути к классам, на него можно ссылаться в logback.xml, используя <property resource="application.properties" />
Производство
Location: /opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
application-prod.properties
logging.home.dir=application/logs/
- Этот файл находится вне приложения. К сожалению, поскольку этот файл не находится в пути к классам, мы не можем загрузить этот файл, как мы это делали при разработке.
Решение:
Чтобы разрешить журналу использовать внешний файл свойств, вам необходимо сделать следующее:
Шаг 1. При запуске приложения вам нужно будет добавить параметр виртуальной машины, указывающий, куда загрузить внешний файл свойств: -Dmy.wonderful.app.external.properties.file=/opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
Шаг 2. В файле журнала теперь можно использовать <property file="${my.wonderful.app.external.properties.file}" /> <!-- note this MUST match the VM option name -->
<property name="LOGGER_HOME" value="${logging.home.dir}" /> <!-- property key from the file -->
Короткий ответ:
Виртуальная машина приложения
-Dmy.wonderful.app.external.properties.file
=/opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
Logback.xml
‹ файл свойств="${my.wonderful.app.external.properties.file
}" />
Примечание 1. Для Intellij добавление параметра виртуальной машины можно выполнить с помощью команды «Выполнить/отладить конфигурацию» > «Spring Boot» > [Конфигурация > «Среда» > «Параметры виртуальной машины:»]
Примечание 2. Для Tomcat добавление параметра виртуальной машины может быть выполнено в /bin/setenv.sh
CATALINA_OPTS=-Dmy.wonderful.app.external.properties.file=/opt/production/tc8 -java8/my_wonderfull_app/application-prod.properties
person
Ithar
schedule
24.10.2018