我想根据环境配置日志附加程序,例如,在生产中运行时,我想配置一个将日志发送到elasticsearch的附加程序,但在测试或开发模式下,不会启用此附加程序。
eri*_*tiz 10
您可以使用logback.configurationFile系统变量覆盖默认的 logback 配置文件。
java -Dlogback.configurationFile=logback-prod.xml -jar your.jar
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要的是使用环境变量的能力,您可以在不使用第三方库的情况下执行此操作:
在调用 main 之前覆盖主 micronaut 类中的 logback 系统变量,如下所示
@Singleton
public class MyMicronautApplication {
public static void main(String[] args) {
var env = System.getenv("MICRONAUT_ENVIRONMENTS");
if (env != null && !env.isEmpty()) {
System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "logback-" + env + ".xml");
}
Micronaut.run(MyMicronautApplication.class);
}
}
Run Code Online (Sandbox Code Playgroud)
创建基于自定义环境的 logback 配置文件,例如:logback-dev.xml并放入资源目录中。
MICRONAUT_ENVIRONMENTS=dev然后根据您的部署逻辑设置环境变量。
喜欢使用logback-dev.xml、logback-prod.xml、logback-stagging.xml等
我发现的解决方法是在 logback 中执行条件表达式。您将需要以下依赖项
<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后在您的logback.xml文件中,您可以执行如下条件语句,用于根据 micronaut 配置文件选择您想要使用的附加程序。就我而言,如果我在本地运行应用程序,我想激活附加程序,但如果应用程序在任何其他环境(例如开发或产品配置文件)中运行,STDOUT我不想激活配置文件,而是我希望使用附加程序。STDOUTRSYSLOG
<root level="info">
<if condition='property("MICRONAUT_ENVIRONMENTS").contains("local")'>
<then>
<appender-ref ref="STDOUT"/>
</then>
<else>
<appender-ref ref="RSYSLOG"/>
</else>
</if>
</root>
Run Code Online (Sandbox Code Playgroud)
您可以使用条件语句来配置 logback 文件中的其他属性。
| 归档时间: |
|
| 查看次数: |
6457 次 |
| 最近记录: |