2008-09-14 2 views
2

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

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

ответ

4

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

статической силы setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler а)
                    Установить по умолчанию обработчик вызывается, когда поток внезапно прекращается из-за неперехваченного исключением, и ни один другой обработчик не было определенный для этого потока.

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

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

3

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

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

1

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

+0

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

Смежные вопросы