比如说,我有一个Sping Boot 应用程序,我使用Log4j进行日志记录。在那里,我想动态更改日志级别,而不需要启动整个应用程序。这可以通过暴露一些端点来设置级别来实现。但是,在生产级别,可能会有同一应用程序的多个示例在不同的服务器上运行。那么,我们如何在运行Kubernetes管理的应用程序的所有容器示例中动态设置日志记录级别呢?
s4chpxco1#
不确定K8s上的配置Map如何解决这个问题。环境变量,命令行参数和配置文件在应用程序启动后被使用/读取。它们上的任何更改都不会重新反映到应用程序中,而无需重新启动。我使用的一个解决方案是在logger库(log4j或logback)上设置扫描间隔。例如,在logback上有一个自动扫描配置参数https://logback.qos.ch/manual/configuration.html#autoScan。这允许应用程序以定义的时间间隔定期检查配置文件中的更改,其中定义了日志级别。因此,即使您使用应用程序的多个示例,所有示例都将扫描相同的配置文件并在无需重新启动的情况下进行更新。
dbf7pr2w2#
如果您的应用程序从application.properties或application.yaml读取日志级别,ConfigMap将执行此操作:ConfigMap是一个API对象,用于以键值对的形式存储非机密数据。Pod可以将ConfigMap作为环境变量、命令行参数或卷中的配置文件使用。ConfigMap允许您将特定于环境的配置与容器映像解耦,以便您的应用程序易于移植。您可以查看我的其他answer,其中我一步一步地写了如何使用ConfigMap的解释
application.properties
application.yaml
ConfigMap
2条答案
按热度按时间s4chpxco1#
不确定K8s上的配置Map如何解决这个问题。环境变量,命令行参数和配置文件在应用程序启动后被使用/读取。它们上的任何更改都不会重新反映到应用程序中,而无需重新启动。
我使用的一个解决方案是在logger库(log4j或logback)上设置扫描间隔。例如,在logback上有一个自动扫描配置参数https://logback.qos.ch/manual/configuration.html#autoScan。
这允许应用程序以定义的时间间隔定期检查配置文件中的更改,其中定义了日志级别。因此,即使您使用应用程序的多个示例,所有示例都将扫描相同的配置文件并在无需重新启动的情况下进行更新。
dbf7pr2w2#
如果您的应用程序从
application.properties
或application.yaml
读取日志级别,ConfigMap将执行此操作:ConfigMap是一个API对象,用于以键值对的形式存储非机密数据。Pod可以将ConfigMap作为环境变量、命令行参数或卷中的配置文件使用。ConfigMap允许您将特定于环境的配置与容器映像解耦,以便您的应用程序易于移植。
您可以查看我的其他answer,其中我一步一步地写了如何使用
ConfigMap
的解释