Spring-Boot在Logback中将build-info包含为SpringProperty

时间:2019-08-06 14:09:36

标签: spring-boot logback spring-logback

我正在将SpringBoot 2.1与spring-boot-maven-plugingit-commit-id-plugin一起使用,以使用构建信息自动填充执行器信息端点。效果很好。我正在将值归为json属性buildgit下。

现在,我还想将这些信息包括在json格式的日志消息中(使用logback logstash)。因此,我尝试使用springProperty扩展名,但是这些元素似乎不能用作环境条目。

<springProperty scope="context" name="info_version" source="info.build.version"/>
<springProperty scope="context" name="build_version" source="build.version"/>

我两种情况都无法解决。我还尝试通过{p>手动添加build-info.properties作为属性源

@PropertySource("classpath:META-INF/build-info.properties")

...但这似乎也不起作用。

因此,如何在日志消息中包括诸如build-version,git-commit之类的属性或来自信息条目的其他内容?

1 个答案:

答案 0 :(得分:0)

不幸的是,我认为这不是您所描述的那样。根据{{​​3}}:

  

由于日志记录是在创建ApplicationContext之前初始化的,因此无法从Spring @Configuration文件中的@PropertySources控制日志记录。更改或完全禁用日志记录系统的唯一方法是通过系统属性。

我认为git.propertiesbuild-info.properties包含在环境中为时已晚,并且在Logback初始化期间无法使用它们的值(这也解释了@PropertySource("classpath:META-INF/build-info.properties")也不起作用的原因)。

您可能可以在构建时使用Maven的资源过滤机制在logback-spring.xml中插入构建信息。

编辑1:

我已经能够使用Maven资源过滤在logback-spring.xml中注入提交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>