Как ограничить количество строк трассировки стека из вложенных исключений - PullRequest
2 голосов
/ 27 мая 2020

Давайте иметь трассировку стека Exception с несколькими разделами «вызвано»:

my.Exception1: Bad luck
  at ...
Caused by: my.Exception2
  at ...
Caused by: my.Exception3
  at ...
Caused by: my.Exception4
  at ...

каждый из разделов, вызванных разделом, может занимать несколько строк. Существует параметр JVM

-XX:MaxJavaStackTraceDepth

, но он влияет на трассировку стека в целом - он вырезает все, что ниже, например Exception3 (самое внутреннее исключение будет отключено). Я хотел бы сохранить каждый раздел «вызвано», но ограничить каждую часть, например, 20 строками. Одно из возможных решений, о котором я знаю, - это ThrowableRenderer из log4j. Есть еще что-нибудь? Цель состоит в том, чтобы сохранить как можно больше полезной информации из трассировок стека в ограниченной среде (максимальный размер в байтах для одной записи журнала).

1 Ответ

1 голос
/ 29 мая 2020

ThrowableRenderer будет способом go. Существует также FilteredPatternLayout из openutils-log4j .

Жесткий подход будет заключаться в получить отбрасываемую трассировку стека , отфильтровать кадры и переназначить отфильтрованные stacktrace для каждого бросаемого в цепочке причин перед тем, как регистрировать цепочку исключений. Что может быть применено в настраиваемом классе фильтра журнала, но это немного меняет правила, потому что фильтр не должен действительно изменять цепочку бросания. Эти кадры будут потеряны навсегда, поэтому возникнет риск.

Logback поддерживает фильтрацию стековых кадров . См. Также Фильтрация следа стека из ада для некоторых идей о том, какую информацию стоит хранить.

...