Изменения уровня динамического журнала с помощью Logback в приложении Docker

В Logback есть функция сканирования изменений в logback.xml (согласно этому) — это отличная функция, которая позволяет долго работающим приложениям поставляться с INFO в качестве уровня по умолчанию, чтобы изменить его на DEBUG, когда что-то должно быть кратко исследовано.

Но в моем недавнем приложении (размещенном в кластере K8s моей компании в качестве контейнера Docker) я не могу использовать вышеуказанную функцию, потому что:

  • пока нет возможности размещать внешние тома, на которые я могу поместить свой logback.xml (разработчики должны изменить его во время отладки)
  • пока нет возможности изменять переменные среды в работающем контейнере без перезагрузки
  • у вас нет сервера JNDI для сопоставления переменных журнала

Учитывая это, есть ли способ, которым я могу предоставить разработчикам возможность изменять уровень ведения журнала моего приложения во время выполнения без перезапуска приложения/контейнера?


person Bharadwaj    schedule 02.05.2020    source источник


Ответы (2)


У меня похожая проблема: мне нужно изменить уровень журнала приложения во время выполнения без перезапуска приложения весенней загрузки. В моей ситуации я не работаю в контексте докера, но думаю, что решение нашей проблемы такое же.

После исследования я нашел 3 возможных решения:

  1. изменить файл журнала во время выполнения
  2. включить JMX и работать с JConsole для изменения уровней ведения журнала
  3. используйте Spring Boot Admin.

Решение 3 является лучшим, если ваше приложение является приложением Spring Boot. Вы можете прочитать следующий учебник Изменение уровня ведения журнала во время выполнения.

администратор весенней загрузки

Вы можете найти пример того, как включить интерфейс администратора на Гитхаб.

person xcesco    schedule 24.05.2020

Я не уверен, что вам также запрещено монтировать 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 (что, насколько мне известно, не приводит к простоям), вы действительно мало что можете сделать.

person Nicolai Schmid    schedule 22.05.2020