Как записывать журналы сбоев в Java

Я работаю над кроссплатформенным приложением на Java, которое в настоящее время хорошо работает в Windows, Linux и MacOS X. Я пытаюсь разработать хороший способ обнаружения (и обработки) «сбоев». Есть ли простой кроссплатформенный способ обнаружить «сбои» в Java и предпринять какие-либо действия в ответ?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
4 055
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Для обработки неперехваченных исключений вы можете предоставить новую группу ThreadGroup, которая обеспечивает реализацию ThreadGroup.uncaughtException (...). Затем вы можете перехватить любые неперехваченные исключения и обработать их соответствующим образом (например, отправить домой журнал сбоев).

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

Не уверен, что это то, что вам нужно, но вы также можете определить, возникло ли исключение из вашего собственного кода. См. http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234 для получения дополнительной информации.

Это полезно знать, поскольку я вызываю Java-код из нативного кода, поэтому он добавит точек, где я могу обрабатывать неожиданные исключения / сбои. Похоже, мне придется разбросать код с помощью нескольких проверок сбоев, используя такой код.

Free Wildebeest 15.09.2008 03:21
Ответ принят как подходящий

Для простой комплексной обработки вы можете использовать следующий статический метод в Нить. Из Javadoc:

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          Set the default handler invoked when a thread abruptly terminates due to an uncaught exception, and no other handler has been defined for that thread.

Это очень широкий способ работы с ошибками или непроверенными исключениями, которые не могут быть обнаружены где-либо еще.

Примечание: Лучше, если код может перехватывать, регистрировать и / или восстанавливать исключения ближе к источнику проблемы. Я бы зарезервировал такую ​​обобщенную обработку сбоев для полностью неустранимых ситуаций (т.е. подклассов java.lang.Error). Старайтесь избегать возможности того, что RuntimeException когда-либо станет полностью неперехваченным, поскольку это может быть возможно - и предпочтительно - для программного обеспечения выжить в этом случае.

Другие вопросы по теме