1

我将 SpringBoot 2.1 与spring-boot-maven-pluginandgit-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"/>

我这两种情况都没有得到解决。我还尝试通过build-info.properties手动添加作为属性源

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

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

因此,如何从日志消息中的信息条目中包含诸如 build-version、git-commit 或其他内容的属性?

4

1 回答 1

4

不幸的是,我认为这不可能如您所描述的那样。根据https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-custom-log-configuration

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

我认为git.propertiesandbuild-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>
于 2019-08-17T05:22:19.297 回答