Leo*_*nel 7 java spring logback spring-profiles 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
Run Code Online (Sandbox Code Playgroud)
在我的项目中,我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的PROFILE是属性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
}
Run Code Online (Sandbox Code Playgroud)
当然没有工作,因为在Spring Boot应用程序之前,Logback会启动logback.
2 - 像这样在logback.xml上使用属性
<file>${LOG_PATH}${APP_NAME}${PROFILE}.log</file>
Run Code Online (Sandbox Code Playgroud)
结果是xyz-spring.profiles.active_IS_UNDEFINED.log
scu*_*ker 14
这有点晚了,但我已经通过将我的"logback.xml"文件重命名为"logback-spring.xml"成功登录了Spring配置文件,并且访问了这样的配置文件(很多)简化版本
<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>
Run Code Online (Sandbox Code Playgroud)
似乎"logback-spring.xml"可以获取配置文件信息.
具体文档在这里.
logging.file=blah.log. 请参阅官方文档。-DLOG_FILE=blah.log。为什么不应该使用配置文件:
您想要做的并不是创建弹簧配置文件的目的。它们需要打开/关闭 bean,以在启动期间激活/停用行为。一般来说,不推荐使用配置文件,因为您测试的内容和生产中的工作内容是不同的(尽管有时没有其他选择)。请参阅原始公告的注意事项部分。
使用配置文件的另一个问题是可以同时激活多个配置文件。创建配置文件是为了打开/关闭小的不相关部件。例如spring.profiles.active=cache-off,perf-monitoring-on或类似的东西。
尽管如此,您仍然可以定义配置文件并logging.file=prod.log在该配置文件中设置属性。这仍然很糟糕,也不应该如何使用配置文件,但这样更好。
| 归档时间: |
|
| 查看次数: |
8444 次 |
| 最近记录: |