Это сильно зависит от вашего приложения.
Приложения, которые все равно продолжают работать (например, веб-серверы, демоны и пакетные процессоры), обычно регистрируют такие ошибки в файле вместе с отметкой времени, идентификатором потока и, возможно, другой полезной информацией.
У меня было очень хороший опыт работы с комбинацией двух файлов журнала.
myapp.log
получает только важные сообщения, обычно предупреждения и ошибки. Этот файл для обычного пользователя и системного оператора. debug.log
для разработчика. Он предоставляет отладочные сообщения за время до возникновения ошибки, но никаких сообщений, пока все работает нормально. Для этого требуется буфер памяти.
Если вы заинтересованы в этом буфере, вы можете взглянуть на http://stefanfrings.de/bfUtilities/index.html. Веб-сайт немецкий, но библиотека и его документация на английском языке sh.
В настольном приложении GUI, когда ошибка прерывает запрошенную операцию, было бы неплохо показать короткие сообщения об ошибке в всплывающее окно и скрыть детали (трассировка стека) в раскрывающемся окне. Не забудьте четко сказать пользователю, какая операция не удалась. Само по себе исключение может быть достаточно ясным для вашего разработчика, но обычные пользователи ожидают менее технического текста. Например: «Загрузка информации о погоде из службы weather.com завершилась неудачно: соединение не удалось», за которым следует трассировка стека.
Для консольных приложений, которые немедленно останавливаются, я предпочитаю видеть трассировку стека непосредственно на экране, как написано printStackTrace()
.