我想根据环境 配置日志记录附加程序 ,例如,在生产环境中运行时,我想配置一个附加程序,它将日志发送给elasticsearch在测试或开发模式下,不会启用此附加程序。
答案 0 :(得分:2)
我发现的解决方法是在logback中执行条件表达式。您将需要以下依赖项
<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.1.2</version>
</dependency>
然后在您的logback.xml
文件中,您可以执行以下条件语句,例如以下操作,以根据micronaut配置文件选择要使用的附加程序。就我而言,如果我在本地运行该应用程序,我想激活STDOUT
附加程序,但是如果该应用程序在任何其他环境(例如dev或prod)中运行,我都不想激活STDOUT
配置文件个人资料,相反,我希望使用RSYSLOG
附加程序。
<root level="info">
<if condition='property("MICRONAUT_ENVIRONMENTS").contains("local")'>
<then>
<appender-ref ref="STDOUT"/>
</then>
<else>
<appender-ref ref="RSYSLOG"/>
</else>
</if>
</root>
您可以使用条件语句在登录文件中配置其他属性。
答案 1 :(得分:1)
您可以使用“logback.configurationFile”系统变量覆盖默认的 logback 配置文件。
java -Dlogback.configurationFile=logback-prod.xml -jar your.jar
但是,如果您需要的是使用环境变量的能力,您可以这样做 无需使用第三方库:
在调用 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(TesabizqrApplication.class);
}
}
创建您自定义的基于 env 的 logback 配置文件,例如:logback-dev.xml 并放入资源目录。
根据您的部署逻辑设置 env var MICRONAUT_ENVIRONMENTS=dev。
享受使用 logback-dev.xml、logback-prod.xml、logback-stagging.xml 等
答案 2 :(得分:0)
根据上述评论在此处输入正确答案。根据{{3}},您只需添加一个logback-production.xml
,其中production
是您的个人资料名称。
答案 3 :(得分:0)
据我了解,Micronaut没有实现Spring boot()之类的类似功能。 我认为logback-production.xml(其中生产是配置文件 )也不起作用-仅支持logback.xml和logback-test.xml。