不幸的是,我认为这不可能如您所描述的那样。根据https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-custom-log-configuration:
由于在创建 ApplicationContext 之前初始化日志记录,因此无法从 Spring @Configuration 文件中的 @PropertySources 控制日志记录。更改日志系统或完全禁用它的唯一方法是通过系统属性。
我认为git.properties
andbuild-info.properties
包含在 Environment 中为时已晚,并且在 Logback 初始化期间无法使用它们的值(这也解释了为什么@PropertySource("classpath:META-INF/build-info.properties")
也不起作用)。
您可以logback-spring.xml
使用 Maven 的资源过滤机制在构建时注入构建信息。
编辑1:
我已经能够在logback-spring.xml
使用 Maven 资源过滤时注入提交 ID
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
然后在logback-spring.xml
:
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<version>@git.commit.id.abbrev@</version>
</encoder>
编辑2:
@Leikingo 在评论中引用的另一个(更好的)解决方案是git.properties
在 logback 配置文件中导入:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property resource="git.properties" />
<springProperty scope="context" name="application_name" source="spring.application.name" />
<appender name="jsonConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<version>${git.commit.id.abbrev}</version>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="jsonConsoleAppender" />
</root>
</configuration>