Если вы хотите просто записать информацию об исключении, просто передайте Exception
соответствующему методу ведения журнала, и пусть регистратор сделает всю работу за вас:
log.error("Exception caught", e)
Большинство регистрация API поддержка a Throwable
в качестве аргумента их debug()
, error()
и т. Д. методы. Не нужно изобретать велосипед, если у вас нет для этого реальной причины.
Что касается ваших вопросов об архитектуре (часть «есть ли лучшая идея»), есть основное правило, которому вы должны следовать: если вы можете что-то сделать с исключением (например, откатить транзакцию), то поймайте его и сделайте то, что нужно , Если вы не можете оправиться от этого, то выбросьте его из вашего метода и позвольте звонящему позаботиться об этом.
В конечном счете, невосстановимые исключения будут распространяться вверх по стеку в контейнер (будь то основной метод, контейнер сервлета или что-то еще). Затем контейнер может записывать журналы, отправлять оповещения или обрабатывать исключение другим способом.
Не используйте общее Exception
(как вы предложили). Не что-то поймать, зарегистрировать, а затем продолжить обработку, как будто этого не произошло (разве что действительно имеет смысл для вашей конкретной ситуации). Если вы не можете обработать исключение, выкиньте его из метода, в котором вы находитесь, и позвольте методу выше позаботиться об этом.