2015-12-23 4 views
5

Есть ли способ получить уведомление обо всех исключениях, которые возникают во время выполнения (обрабатываются и необрабатываются)?Получать уведомления о каждом исключении (даже обработанных)

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

Я прочитал кое-что о ExceptionListener, но они, кажется, предназначены для другая работа.

У кого-нибудь есть идея, как это возможно?

+0

Этот ответ может сделать то, что вы хотите: http://stackoverflow.com/a/20284294/611819 – dnault

+0

выглядит многообещающим ... но это позволило бы мне получить исключения, обработанные в try/catch-block. – Raven

+0

Почему вы хотите это сделать? Если возникает исключение и обрабатывается как часть нормальной обработки, почему кому-то это нужно. Если у вас есть код, который ловит ВСЕ исключения и отбрасывает их ... Вы должны исправить этот код, чтобы вести себя лучше. – Raedwald

ответ

2

Исключения обычно регистрируются при захвате (а не брошены), поэтому их последствия также могут регистрироваться. То есть, некоторые исключения не имеют никаких последствий, поэтому не требуют расследования, в то время как другие исключения чрезвычайно важны и должны быть исследованы всякий раз, когда они происходят. Поэтому хороший файл журнала должен содержать не только то, что произошло исключение, но и влияние (бизнес) этого исключения, которое известно только после того, как исключение поймано. Это требует, чтобы исключения регистрировались при их обработке.

Таким образом, Java API не перехватывает все исключения, выполняемые запущенной программой.

Однако иногда это может помочь просмотреть все брошенные исключения. Вы можете сделать это, присоединив отладчик к JVM и установите «контрольную точку исключения» для всех подклассов java.lang.Throwable. Кроме того, вы можете написать перехватчик для регистрации всех исключений, пересекающих границу API (любой разумный контейнер для инъекций зависимости может помочь в этом). Или вы можете использовать Instrumentation API для добавления регистрации в классы по мере их загрузки.