2014-08-22 2 views
4

Я сомневаюсь, что такая вещь возможна, но без прикрепления отладчика к java-приложению, возможно ли, чтобы какая-то коллекция была заполнена информацией обо всех исключениях, которые генерируются в приложении Java, независимо от того, поймано это или нет? Я знаю, что в .NET сообщения генерируются приложением об исключениях, которые в этот момент называются «Исключениями первого шанса», которые могут или не могут быть впоследствии обработаны приложением. Мне интересно, может ли быть аналогичный механизм в java, который я могу использовать для просмотра информации обо всех исключениях, сгенерированных во время выполнения.Захват всех заброшенных исключений в java?

Просто уточнить. Это не имеет никакого отношения к контексту, в котором происходит исключение. Этот вопрос не касается того, что я делаю в блоке catch или необработанных исключениях. Его знание о том, предоставляет ли JVM механизм для просмотра каждого исключения, генерируемого во время выполнения, независимо от того, что сгенерировало его, или контекста.

+0

Почему бы вам не хотеть получить исключение? Если его поймать, просто добавьте stacktrace в log4j или что-то подобное? – redFIVE

+1

У нас есть клиент, у которого есть в голове, что он может получить содержательную информацию из полного списка исключений, созданных нашим приложением, независимо от того, были ли они необработаны или нет. Мы также хотим избежать рефакторинга больших частей нашей базы кода, чтобы сделать что-то вроде того, что вы предложили, и захватить исключения данных в каждом заявлении try. –

+0

Вы должны отредактировать исходный вопрос и добавить эту информацию. – redFIVE

ответ

6

Почему бы и нет, это, конечно, возможно! Но во-первых. Регистрация всех исключений, с которыми сталкивается JVM, является пустой тратой жизни. Это бессмысленно во всех смыслах, может быть несколько разбросанных без особого значения.

Но если действительно, если у вас нет выбора, вы можете настроить свою Java для этого.

Ломать все правила хорошего программирования, ради чего мы живем, я даю вам эту идею:

  1. Скопируйте исходный код java.lang.Exception из источников JDK к вашему проекту

  2. Создание метода в ваш Exception.java как ниже

    private void logException(){ //your logging routine here }

  3. Редактировать java.lang.Exception вызвать этот метод logException() в конце каждого конструктора

  4. добавить новый java.lang.Exception к самозагрузке пути к классам

  5. Установите ваши уровни ведения журнала и т.д. и пробега

Положите свои головы, представите это своему странному клиенту, используйте свои дипломатические навыки и напугайте их несколькими словами «w e может это сделать .. но его собственный риск '. Вероятно, вы убедите его не использовать это.

+0

Я пробовал это, он работает достаточно хорошо, я полагаю, и только один вопрос, нормально ли это чувствую себя действительно грязным после того, как сделал такую ​​вещь? –

+0

Да, полностью. Это один из лучших способов сделать анти-демонстрацию. Анекдоты, сделав это, вы ru в согласованности хорошо протестированного продукта, сильно повредить параллелизм, добавить влияние непроверенного кода без исчерпывающего тестирования системы (а не только вашего кода, JVM тоже) и, вероятно, много чего я слишком сонлив, чтобы думать, спокойной ночи. –