docker 应用中的 Logback 动态日志级别发生变化

Dynamic log level changes with Logback in a docker app

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

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

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

我不确定你是否也被禁止将 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(据我所知这不会导致停机),您真的无能为力

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

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

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

如果您的应用是 Spring 启动应用,则 3 的解决方案是最好的。可以看下面的教程Changing the logging level at runtime.

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