使用Spring Cloud Kubernetes初始化Spring Boot Log

问题描述

Spring Boot 2.2.6-发布

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

logging.config: classpath:my-logback-config.xml

这很好用,spring很好地进行了配置

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

<springProperty name="LOG_HOST" source="config.logHost" />
<springProperty name="LOG_PORT" source="config.logPort" />

同样,这很好,它可以从外部配置文件获取其值,该文件在ENV变量中定义

SPRING_CONfig_ADDITIONAL_LOCATION=file:/my-env.properties

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

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

似乎尚未加载SPRING_CONfig_ADDITIONAL_LOCATION中的值。

我无法从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/"