Micronaut 根据环境配置记录器附加程序
Micronaut configure logger appenders based of the enviroment
我想根据环境配置日志附加程序,例如在生产中运行我想配置一个 appender 将日志发送到 elasticsearch 但在测试或开发模式下此 appender 将不会启用。
据我了解,Micronaut 没有实现类似 Spring boot ( ) 的功能。
我认为 logback-production.xml (其中生产是配置文件
) 也不起作用 - 仅支持 logback.xml 和 logback-test.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>
然后在你的 logback.xml
文件中,你可以做一个条件语句,比如下面的,用于根据 micronaut 配置文件选择你想要使用的附加程序。就我而言,如果我是本地的 运行 应用程序,我想激活 STDOUT
appender 但如果应用程序是 运行 我不想激活 STDOUT
配置文件任何其他环境,例如 dev 或 prod 配置文件,我希望使用 RSYSLOG
appender。
<root level="info">
<if condition='property("MICRONAUT_ENVIRONMENTS").contains("local")'>
<then>
<appender-ref ref="STDOUT"/>
</then>
<else>
<appender-ref ref="RSYSLOG"/>
</else>
</if>
</root>
您可以使用条件语句来配置 logback 文件中的其他属性。
您可以使用“logback.configurationFile”系统变量覆盖默认的 logback 配置文件。
java -Dlogback.configurationFile=logback-prod.xml -jar your.jar
但是,如果您需要的是使用环境变量的能力,您可以这样做
不使用第三方库:
在调用 main 之前覆盖 main micronaut class 中的 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);
}
}
创建您自定义的基于环境的 logback 配置文件,例如:logback-dev.xml 并放入资源目录。
根据您的部署逻辑设置环境变量 MICRONAUT_ENVIRONMENTS=dev。
享受使用logback-dev.xml、logback-prod.xml、logback-stagging.xml等
我想根据环境配置日志附加程序,例如在生产中运行我想配置一个 appender 将日志发送到 elasticsearch 但在测试或开发模式下此 appender 将不会启用。
据我了解,Micronaut 没有实现类似 Spring boot ( ) 的功能。 我认为 logback-production.xml (其中生产是配置文件 ) 也不起作用 - 仅支持 logback.xml 和 logback-test.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>
然后在你的 logback.xml
文件中,你可以做一个条件语句,比如下面的,用于根据 micronaut 配置文件选择你想要使用的附加程序。就我而言,如果我是本地的 运行 应用程序,我想激活 STDOUT
appender 但如果应用程序是 运行 我不想激活 STDOUT
配置文件任何其他环境,例如 dev 或 prod 配置文件,我希望使用 RSYSLOG
appender。
<root level="info">
<if condition='property("MICRONAUT_ENVIRONMENTS").contains("local")'>
<then>
<appender-ref ref="STDOUT"/>
</then>
<else>
<appender-ref ref="RSYSLOG"/>
</else>
</if>
</root>
您可以使用条件语句来配置 logback 文件中的其他属性。
您可以使用“logback.configurationFile”系统变量覆盖默认的 logback 配置文件。
java -Dlogback.configurationFile=logback-prod.xml -jar your.jar
但是,如果您需要的是使用环境变量的能力,您可以这样做 不使用第三方库:
在调用 main 之前覆盖 main micronaut class 中的 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); } }
创建您自定义的基于环境的 logback 配置文件,例如:logback-dev.xml 并放入资源目录。
根据您的部署逻辑设置环境变量 MICRONAUT_ENVIRONMENTS=dev。
享受使用logback-dev.xml、logback-prod.xml、logback-stagging.xml等