6

Logback 具有扫描 logback.xml 中更改的功能(根据this) - 这是一个很棒的功能,它允许长时间运行的应用程序附带 INFO 作为默认级别,当必须简要调查某些内容时将其更改为 DEBUG。

但是在我最近的应用程序(作为 Docker 容器托管在我公司的 K8s 集群上)中,我无法使用上述功能,因为:

  • 还没有提供托管外部卷的规定,我可以在其中放置我的 logback.xml(在调试期间由开发人员更改)
  • 还没有规定在不重新启动的情况下更改正在运行的容器中的环境变量
  • 没有 JNDI 服务器来映射日志变量

鉴于此,有没有一种方法可以让开发人员在运行时更改我的应用程序的日志记录级别,而无需重新启动应用程序/容器?

4

2 回答 2

2

我不确定你是否也被禁止将 configmap 挂载到容器中,因为你没有提到它。
但是如果你不是,你可以创建一个 configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: logback-conf
data:
  logback.xml: |
    <configuration>
      <root level="debug">
        <appender-ref ref="STDOUT" />
      </root>
    </configuration>

并将其添加到容器中,如下所示:

  containers:
    - name: app
      volumeMounts:
      - name: config
        # The conf will be mounted at /app/logback.xml
        mountPath: /app
...
  volumes:
    - name: config
      configMap:
        name: logback-conf

如果您甚至不允许注入 configmap(据我所知,这不会导致停机),那么您真的无能为力

于 2020-05-22T21:05:36.287 回答
1

我有一个类似的问题:我需要在运行时更改应用程序日志级别,而无需重新启动 Spring Boot 应用程序。在我的情况下,我不是在 docker 环境中工作,但我认为我们的问题的解决方案是相同的。

经过研究,我发现了 3 种可能的解决方案:

  1. 在运行时更改日志文件
  2. 启用 JMX 并使用 JConsole 更改日志级别
  3. 使用 Spring Boot 管理员。

如果您的应用程序是 Spring Boot 应用程序,则 3 解决方案是最好的。您可以阅读以下教程在运行时更改日志记录级别

春季启动管理员

您可以在Github上找到如何启用管理界面的示例。

于 2020-05-24T09:10:19.967 回答