我正在使用一个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
在我的项目中,我正在使用带有application.yml(application-dev.yml和application-production.yml)的属性。
由于Logback Spring扩展程序在Spring之前启动,因此我无法将spring.profiles.active注入到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>
我要找的配置项是 spring.profiles.active。
我的目标是在目录/var/log中有一个日志文件,它要么是xyz-dev,要么是xyz-production,但是实际上我得到的是xyz-spring.profiles.active_IS_UNDEFINED.log。
方案:
1 - 使用组件如下:
@Component
public class InitializationService implements ApplicationListener<ContextRefreshedEvent> {
// inject spring profile active into logback.xml
}
当然不起作用,因为logback Spring扩展在Spring Boot应用程序之前启动。
2- 在logback.xml文件中使用类似这样的属性
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
结果是 xyz-spring.profiles.active_IS_UNDEFINED.log