使用Spring Cloud Kubernetes初始化Spring Boot Log

问题描述

@H_404_0@ Spring Boot 2.2.6-发布

@H_404_0@在我的application.yml中,有以下一行:

logging.config: classpath:my-logback-config.xml
@H_404_0@这很好用,spring很好地进行了配置

@H_404_0@在我的my-logback-config.xml中,有以下一行:

<springProperty name="LOG_HOST" source="config.logHost" />
<springProperty name="LOG_PORT" source="config.logPort" />
@H_404_0@同样,这很好,它可以从外部配置文件获取其值,该文件在ENV变量中定义

SPRING_CONfig_ADDITIONAL_LOCATION=file:/my-env.properties
@H_404_0@但是当我启用Spring Cloud Kubernetes时,此操作失败,并显示UnkNowHostException:"LOG_HOST_IS_UNDEFINED" cannot be resolved.LOG_HOST的值用于设置网络附加程序)

@H_404_0@为什么启用Spring Cloud Kubernetes会更改日志记录初始化的行为?

@H_404_0@似乎尚未加载SPRING_CONfig_ADDITIONAL_LOCATION中的值。

@H_404_0@我无法从configMap加载此值,因为在初始化日志记录时尚未初始化Spring Cloud Kubernetes。

解决方法

最后,问题在于ENV var SPRING_CONFIG_ADDITIONAL_LOCATION被设置为文件夹,而不是容器上的文件。

在Windows本地,将'SPRING_CONFIG_ADDITIONAL_LOCATION'设置为文件或文件夹似乎可行,但是在Docker映像(RH linux)中会产生影响。

SPRING_CONFIG_ADDITIONAL_LOCATION设置为文件夹时,将忽略附带的“ .properties”文件的值。

我可以通过更改docker文件来重现(修复)该问题:

ENV SPRING_CONFIG_ADDITIONAL_LOCATION="/mnt/properties/application.properties"

ENV SPRING_CONFIG_ADDITIONAL_LOCATION="/mnt/properties/"