logging - 在 Docker 应用程序中使用 Logback 更改动态日志级别

标签 logging logback logback-classic

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

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

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

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

    最佳答案

    我不确定你是否也被禁止将 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
    

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

    关于logging - 在 Docker 应用程序中使用 Logback 更改动态日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61566489/

    相关文章:

    java - 为什么日志消息不能\n 在文本文件中?

    java - logback 行号未显示在日志中

    java - 有什么方法可以在压缩旋转日志文件之前添加延迟

    java - 如何将扩展 SLF4J 与 Logback 结合使用

    java - logback(1.3.0) & slf4j(2.0.0-alpha2) 版本组合不起作用

    logging - Logback:SizeAndTimeBasedRollingPolicy 将totalSizeCap 应用于maxHistory 中的每一天

    java - Log4j2 编程配置不滚动文件

    python - 在 Heroku 上登录 Django 没有出现

    ms-access - Showplan.out 在安装了 MS-Access 2003 和多个版本的 Office 的 Windows 7 中?

    java - Logback - 每个方法使用 appender,而不是类