动态更改所有实例的日志级别

问题描述 投票:0回答:1

假设我有一个 Spring Boot 应用程序,我使用 Log4j 进行日志记录。 在那里,我想动态更改日志级别而不用盯着整个应用程序。
这可以通过暴露一些端点来设置级别来实现。 但是,在生产级别,可能有同一应用程序的多个实例在不同的服务器上运行。
那么,我们如何在运行 kubernetes 管理的应用程序的所有容器实例中动态设置日志记录级别?

spring-boot kubernetes logging microservices production-environment
1个回答
2
投票

不确定 K8s 上的配置映射将如何解决问题。 一旦应用程序启动,就会使用/读取环境变量、命令行参数和配置文件。如果不重新启动,对它们的任何更改都不会反映到应用程序。

我使用的一个解决方案是在记录器库(log4j 或 logback)上设置扫描间隔。 例如,在 logback 上有一个自动扫描配置参数 https://logback.qos.ch/manual/configuration.html#autoScan

这允许应用程序以定义的时间间隔定期检查您定义日志级别的配置文件上的更改。 因此,即使您使用应用程序的多个实例,所有这些实例都将扫描相同的配置文件并在无需重新启动的情况下进行更新。

此外,这还取决于您的应用程序在 Kubernetes 上的运行方式,如果您的 pod 寿命较短,或者您不介意以蓝绿或 canari 方式重新启动 pod 以免中断服务,这也是一个解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.