在docker应用中使用Logback动态改变日志级别。

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

Logback有一个功能,可以扫描logback.xml中的变化(按 这个)--这是一个很好的功能,它可以让长期运行的应用在出厂时将INFO作为默认级别,当有事情需要简单调查时,可以将其改为DEBUG。

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

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

有鉴于此,我是否可以建立一个规定,让开发人员在运行时改变应用程序的日志级别,而无需重新启动appcontainer?

logging logback logback-classic
1个回答
0
投票

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

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

  1. 在运行时更改日志文件
  2. 启用JMX,并与JConsole一起更改日志级别。
  3. 使用Spring Boot Admin。

如果你的应用是Spring Boot应用,那么这3种解决方案是最好的。你可以阅读以下教程 在运行时更改日志级别.

spring boot admin

你可以找到一个例子,如何启用管理界面上的 Github.


1
投票

我不确定你是否也被禁止将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(据我所知,这不会导致宕机),那你就没办法了:

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