Я не уверен насчет лучших рекомендаций для этого, но, в конце концов, для меня это сводится к следующему:
Исключения должны быть видны только в исключительных обстоятельствах. Концепция исключения была изобретена, чтобы дать разработчикам возможность обрабатывать ошибки внутренне.
На самом деле большая часть кода, который я вижу, даже не пытается обработать их, вместо этого выдает их в журнал, sysout (или в худшем случае) в диалоговые окна. Я знаю, что для разработчика важно в некоторых случаях получить полную stacetrace. Но не почти во всех из них. Создание вашей собственной структуры исключений (что, безусловно, является наилучшей практикой) уже может быть достаточно для определения контекста исключения просто по имени класса.
Поэтому я бы посоветовал сделать следующее:
- Создайте собственную структуру исключений
- Включите в сообщение конкретные коды ошибок, для справки
- Записать сообщение об ошибке на ОШИБКУ
- Записать трассировку стека на DEBUG
- НИКОГДА не показывать пользователю ни то, ни другое. Вместо этого покажите полезное сообщение. Может быть, включить способ сообщить об ошибке (с помощью трассировки стека) с минимальным запуском.
Примечание. Если вы пишете внутреннее «корпоративное» программное обеспечение, забудьте обо всем, что я написал. : -)