Как ввести профиль active spring в logback
Я использую проект spring boot.
среда:
ch.qos.logback:logback-core:jar:1.1.5
ch.qos.logback:logback-classic:jar:1.1.5
org.springframework.boot:spring-boot-starter-logging:jar:1.3.3.RELEASE
в моем проекте я использую свойства с применением.yml (application-dev.yml и приложение-производство.в формате YML)
поскольку расширение пружины Logback начинается до весны, я не могу ввести пружину.профили.активен в logback.XML-файл.
это более простая версия моего logback.xml-файл:
<configuration scan="true">
<property name="LOG_PATH" value="/var/log/" />
<property name="APP_NAME" value="xyz" />
<property name="PROFILE" value="-${spring.profiles.active}" />
<property name="CHARSET" value="utf-8" />
<property name="PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<appender name="APP-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
<encoder>
<charset>${CHARSET}</charset>
<Pattern>${PATTERN}</Pattern>
</encoder>
</appender>
<logger name="a.b.c" level="INFO">
<appender-ref ref="APP-FILE" />
</logger>
<root level="INFO">
<appender-ref ref="APP-FILE"/>
</root>
профиль, который я ищу для свойства весна.профили.активный.
моя цель-иметь файл журнала в каталоге /var / log файлы xyz-dev или xyz-production но я получаю xyz-весна.профили.active_IS_UNDEFINED.log вместо конечно.
подходы:
1-Использование такого компонента, как:
@Component
public class InitializationService implements ApplicationListener<ContextRefreshedEvent> {
// inject spring profile active into logback.xml
}
не работает, конечно, потому что расширение пружины logback начинается раньше Приложение Spring Boot.
2-Использование свойства в logback.xml, как это
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
результатом является XYZ-spring.профили.active_IS_UNDEFINED.log
3 ответов
немного поздно отвечать, но я успешно зарегистрировал профиль Spring, переименовав мой "logback.xml "файл в" logback-spring.xml", и доступ к профилю, как это (много) упрощенная версия
<springProperty scope="context" name="ACTIVE_PROFILE" source="spring.profiles.active"/>
<appender name="GRAYLOG" class="com.github.pukkaone.gelf.logback.GelfAppender">
<additionalField>environment=${ACTIVE_PROFILE}</additionalField>
</appender>
<root level="WARN">
<appender-ref ref="GRAYLOG" />
</root>
Кажется ,что " logback-spring.xml " может забрать информацию о профиле.
конкретные документация здесь.
вот что я сделал для моего проекта. Внутри logback.xml
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property resource="application.properties"/>
затем вы можете использовать свойства, определенные в вашем приложении.файл свойств. ${MY-PROPERTY}
В моем приложении.свойства у меня есть свойство для имени файла журнала.
Это не работает с application.yml => YAML
файл свойств, потому что yaml
файл интерпретируется после инициализации logback.
- поскольку вы используете Spring Boot, вы можете определить
logging.file=blah.log
. См.официальные документы. - или вы можете использовать vanilla Logback и передать системную переменную:
-DLOG_FILE=blah.log
.
почему вы не должны использовать профили:
то, что вы пытаетесь сделать, это не то, для чего были созданы профили spring. Они необходимы для включения/выключения компонентов для активации / деактивации поведения во время запуска. профили не рекомендуется практиковать в генерал!--18--> так как то, что вы тестируете и что работает в производстве, отличается (хотя иногда нет другого выбора). См.предостережения на исходное объявление.
еще одна проблема с использованием профилей заключается в том, что несколько профилей могут быть активированы одновременно. Профили были созданы для включения / выключения небольших несвязанных деталей. Е. Г. spring.profiles.active=cache-off,perf-monitoring-on
или что-то в этом роде.
имея все, что сказал, Вы все равно можете определить профиль и набор logging.file=prod.log
собственность в этом профиле. Это еще очень плохо, а не как профили должны использоваться, но это лучше.