Когда регистрировать трассировку стека для пойманного исключения - PullRequest
3 голосов
/ 09 сентября 2011

Я недавно спросил , следует ли сообщать getMessage() текст перехваченного исключения .Удивительно, но большинство ответов неправильно поняли мой вопрос и подумали, что я спрашиваю, следует ли сообщать о трассировке стека для обнаруженного исключения, предполагая, что это считается нормой.Поэтому я задаю дополнительный вопрос.

При каких обстоятельствах вы должны или не должны сообщать трассировку стека, когда вы catch исключение?Под «сообщением» я включаю , запрашивая структуру ведения журнала для записи трассировки стека .

Я не спрашиваю, сообщать ли что-то .Я спрашиваю, должен ли этот отчет включать трассировку стека.

Ответы [ 5 ]

7 голосов
/ 09 сентября 2011

Я лично стараюсь подчиняться этим правилам:

  • если я могу обработать исключение в улове «восстанавливаемым» способом (например, DateFormatException), нет необходимости отслеживать стек

  • если я хочу перебросить исключение, не регистрировать трассировку стека. (перебросить в цепочке, чтобы сохранить эту информацию)

  • если я обработаю исключение в блоке перехвата как случай ошибки (например, ошибка sql), я зарегистрирую трассировку стека.

  • если это исключение во время выполнения, я бы предложил, чтобы инфраструктура (ваша или все, что вы используете) выполняла трассировку.

2 голосов
/ 09 сентября 2011

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

2 голосов
/ 09 сентября 2011

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

Если вы не войдете в файл, что вы будете делать? Файлы - это самая надежная вещь, доступная в JVM, поэтому вы должны как минимум поместить ее туда, прежде чем отправлять в сеть.

0 голосов
/ 09 сентября 2011

Я бы доложил обо всех.Но если вы используете log4j, то вы можете контролировать, какие из них вы знаете наверняка, вам не будет интересно видеть в журнале.Если конкретное пользовательское исключение имеет другой класс, отключите вход в этот класс в рабочей среде и включите его в более низких средах.Таким образом, вы ничего не делаете на уровне кода для создания отчетов.Все это абстрагировано в каркасе логирования.

0 голосов
/ 09 сентября 2011

Я обычно сообщаю об исключениях, не связанных с GUI.GUI Исключения распространены, и в тяжелых программах Swing обычно бывает.

Вообще говоря, меня очень интересуют: исключения, связанные с БД, исключения My-own-stupid-errors (массив вне границ и тому подобное) и некоторые другие вещи, которые я не могу обработать,например, веб-сервисы и т. д.

Я думаю, что это зависит от типа системы: публичной (например, веб-сайт) или частной (интранет-сайты, локальный графический интерфейс)

...