AsyncAppender Logback теряет события журнала, даже когда у нас низкий уровень регистрации - PullRequest
0 голосов
/ 28 февраля 2020

Мы используем logback с AsyncAppender. Мы использовали его таким образом в течение многих лет, но недавно мы заметили, что сообщения журнала пропадают. Мы понимаем, что AsyncAppender не гарантирует, что этого не произойдет, настолько справедливо, в некотором смысле. Но в нашем случае скорость регистрации сообщений составляет очень низкая , поэтому тот факт, что сообщения журнала пропадают, очень удивителен.

Мы убедились, что AsyncAppender виноват, временно используя синхронный FileAppender. Когда мы сделали это, сообщения журнала не пропали. Кроме того, мы попытались установить discardThreshold в 0, и это также устранило проблему.

Но эти исправления не так уж хороши для нас. Эти журналы пишутся в Future-like вещах, которые должны быть неблокирующими, и поэтому мы не хотим, чтобы они когда-либо блокировались. Если бы они извергали события регистрации событий с бешеной скоростью, мы были бы готовы время от времени терять записи журнала, но это не то, что происходит. Скорость событий журнала медленная.

Есть какие-нибудь теории о том, что здесь происходит? И как мы можем это исправить и освободить наше будущее от блокирования деятельности? (Оставить discardThreshold в 0 не очень хорошо для нас, потому что это позволяет регистрировать события в журнале, если необходимо, чтобы убедиться, что все события журнала записаны, и мы не хотим, чтобы наше Futures когда-либо блокировалось.)

Одна мысль, которая у нас возникла по этому поводу, заключается в том, что у нас действительно много событий журнала DEBUG, но уровень ведения журнала в нашем обратном журнале. xml в данный момент настроен на INFO, поэтому события DEBUG не регистрируются.

Возможно ли, что события DEBUG каким-то образом засоряют AsyncAppender, даже если они настроены на запись в журнал. До сих пор наша теория всегда заключалась в том, что события DEBUG будут отфильтровываться задолго до попадания в очередь AsyncAppender. Разве это не так?

Или возможно, что AsyncAppender не является потокобезопасным?

Мы используем версию 1.2.3.

.
...