Насколько я знаю, для этого не существует официального API Java, кроме API отладки, который можно было бы использовать и изнутри виртуальной машины, которая должна быть отлажена.
Более простой и быстрый способ получать уведомления о каждом исключении, которое создается во время выполнения, - это взломать некоторый код трассировки непосредственно в конструктор (ы) класса Throwable, скомпилировать его и поместить в bootclasspath
перед rt.jar. Это, конечно, ничего не нужно делать в версии выпуска, но это может быть очень полезно для анализа кода, который где-то ловит исключения и не сообщает о них должным образом.
В ответ на комментарии:
Относительно API отладчика: в последний раз, когда я делал что-то подобное, я использовал JVMDI для создания собственной библиотеки JNI / JVMDI и обращался к ней изнутри виртуальной машины. Он работает и позволяет вам делать все виды проводных вещей, которые Java обычно не предлагает, но я бы посчитал это еще более взломанным, чем использование пропатченного класса Throwable. Кроме того, JVMDI устарел и был заменен на JVM TI начиная с Java 1.6. Я не знаю, если и как вы можете сделать что-то подобное с этим новым API отладчика.
Использование модифицированного Throwable - это быстро, легко получить правильное решение, само по себе не приводит к ухудшению производительности, а также даже не действительно хакерский, если вы контролируете среду выполнения. Вы могли бы думать о каком-то АОП. ;) Но я бы по-прежнему использовал его только для того, чтобы в противном случае было трудно обнаружить ошибки, а не в рабочем коде или только в крайнем случае. Нечто подобное не должно рассматриваться как часть дизайна. Лучшим долгосрочным подходом было бы добиться того, чтобы все ваши группы разработчиков договорились о каком-то распространенном исключении.
Также FindBugs может очень помочь, если вы решите сделать обзор кода, чтобы найти все эти места, где исключения обнаруживаются и не сообщаются.