Logback: цель и область применения StatusManager для микросервиса, использующего Logstash - PullRequest
0 голосов
/ 28 декабря 2018

Согласно руководству :

Logback собирает свои внутренние данные состояния в объекте StatusManager, доступном через LoggerContext.

.StatusManager вы можете получить доступ ко всем данным состояния, связанным с контекстом возврата.Чтобы сохранить использование памяти на разумных уровнях, стандартная реализация StatusManager хранит сообщения о состоянии в двух отдельных частях: часть заголовка и хвостовая часть.Часть заголовка хранит первые H сообщений о состоянии, тогда как хвостовая часть хранит последние T сообщений.В настоящее время H = T = 150, хотя эти значения могут измениться в будущих выпусках.

Похоже, что цель состоит в том, чтобы позволить прослушивать входящие сообщения журнала, также просматривая их через сервлет.

В нашем случае мы используем logstash-logback-encoder и отправляем наши сообщения Logback на консоль, чтобы fluentd / Filebeat и т. Д. Могли отправлятьсяк удаленному Logstash - и поэтому нашим микросервисам нет необходимости проверять или прослушивать их.

Поэтому возникает вопрос: можем ли мы переопределить значение по умолчанию BasicStatusManager (с реализацией NOOP)для подавления внутреннего хранения этих сообщений, или кто-нибудь знает, зависит ли кодер Logstash, или подключается к самому механизму состояния?

Наши logback.xml довольно просты:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="lsAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <logger name="a.b.c" level="debug"/>

    <root level="debug">
        <appender-ref ref="lsAppender"/>
    </root>
</configuration>

Моя секунда причина для того, чтобы спросить, что мы недавно получили OOMEs от микросервисов с кучей 120 МБ.Конечно, эти отдельные сообщения журнала слишком велики, но это проблема, только если они задерживаются самим Logback, а не отсылаются и забываются.Это будет на одну проблему меньше масштабируемости.

Снимок экрана вывода YourKit:

enter image description here

...