gpt4 book ai didi

java - 如何根据属性文件或环境变量选择Logback Appender

转载 作者:行者123 更新时间:2023-11-30 05:30:52 27 4
gpt4 key购买 nike

我已经为 Spring Boot 项目配置了 logback xml。

我想根据配置的属性配置另一个附加程序。我们想要为 JSON 日志或文本日志创建一个追加器,这将由属性文件或环境变量决定。

所以我正在考虑做到这一点的最佳方法。

  • 使用过滤器将日志打印到文件之一(JSON 或 Txt)。但这将创建两个附加程序。我只想创建 1 个附加程序。
  • 在 logback XML 文件中使用“If else” block 。将 if else 放在附加程序周围,记录器似乎不整洁且容易出错。所以会尽量避免。
  • 现在探索可以在运行时添加附加程序的选项。

所以我想知道是否可以在运行时添加附加程序。是在 Spring 启动之前添加还是可以在项目中随时完成。

包含此场景的最佳方法是什么。

最佳答案

由于您已经在使用 Spring,我建议使用 Spring Profiles ,比尝试以编程方式执行相同操作要干净得多。 Spring Boot docs 中也概述了此方法。 .

您可以从任一属性文件设置 Activity 配置文件:

spring.profiles.active=jsonlogs

或者来自环境值:

spring_profiles_active=jsonlogs

启动参数:

-Dspring.profiles.active=jsonlogs

然后每个配置文件都有单独的配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="stdout-classic" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M - %msg%n</pattern>
</encoder>
</appender>
<appender name="stdout-json" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
<timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
</layout>
</encoder>
</appender>
<!-- begin profile-specific stuff -->
<springProfile name="jsonlogs">
<root level="info">
<appender-ref ref="stdout-json" />
</root>
</springProfile>
<springProfile name="classiclogs">
<root level="info">
<appender-ref ref="stdout-classic" />
</root>
</springProfile>
</configuration>

关于java - 如何根据属性文件或环境变量选择Logback Appender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com