假设我有一个使用Log4j进行日志记录的Spring Boot应用程序。
在这里,我想动态更改日志级别,而不必启动整个应用程序。
可以通过公开一些端点来实现此目标。
但是,在生产级别上,可能会有多个相同应用程序的实例在不同的服务器上运行。
那么,我们如何在Kubernetes管理的运行应用程序的所有容器实例之间动态设置日志记录级别呢?
假设我有一个使用Log4j进行日志记录的Spring Boot应用程序。
在这里,我想动态更改日志级别,而不必启动整个应用程序。
可以通过公开一些端点来实现此目标。
但是,在生产级别上,可能会有多个相同应用程序的实例在不同的服务器上运行。
那么,我们如何在Kubernetes管理的运行应用程序的所有容器实例之间动态设置日志记录级别呢?
不确定如何在 K8s 上使用配置映射解决问题。 环境变量、命令行参数和配置文件是应用程序启动后只读取/使用一次的。对它们的任何更改都不会在无重新启动的情况下反映到应用程序中。
我使用的解决方案之一是在记录器库(log4j或logback)上设置扫描间隔。 例如,在 logback 中,有一个自动扫描配置参数https://logback.qos.ch/manual/configuration.html#autoScan。
这允许应用程序定期检查定义的间隔时间内 config 文件中定义日志级别的更改。 因此,即使您使用多个应用程序实例,所有实例都将扫描同一配置文件并在无需重新启动的情况下进行更新。