我正在使用春季启动项目。
环境:
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
}
当然不起作用,因为在Spring Boot应用程序之前,Logback会启动logback。
2 - 在logback.xml上使用像
这样的属性<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
结果是xyz-spring.profiles.active_IS_UNDEFINED.log
答案 0 :(得分:10)
这回答有点迟,但我已经通过重命名我的&#34; logback.xml&#34;成功登录了Spring配置文件。文件到&#34; logback-spring.xml&#34;,并访问了这样的配置文件(很多)简化版
<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>
似乎&#34; logback-spring.xml&#34;可以拿起个人资料信息。
答案 1 :(得分:3)
这是我为我的项目所做的。在logback.xml
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property resource="application.properties"/>
然后,您可以使用application.properties文件中定义的属性。 ${MY-PROPERTY}
在我的application.properties中,我有一个日志文件名的属性。
这不适用于application.yml => YAML
属性文件,因为yaml
文件在logback init之后被解释。
答案 2 :(得分:3)
a {
text-decoration:none;
color:white;
}
a:hover {
color:black;
}
。见official docs。为什么您不应该使用个人资料
您尝试做的不是创建弹簧配置文件的原因。他们需要打开/关闭bean以在启动期间激活/停用行为。 配置文件一般不建议使用,因为您测试的内容和生产中的内容是不同的(尽管有时没有其他选择)。请参阅the original announcement的警告部分。
使用配置文件的另一个问题是可以同时激活多个配置文件。创建配置文件以打开/关闭小的不相关部件。例如。 logging.file=blah.log
或类似的东西。
尽管如此,您仍然可以定义配置文件并在该配置文件中设置-DLOG_FILE=blah.log
属性。那仍然非常坏,而不是应该如何使用配置文件,但这样做会更好。