При регистрации когда фатальная ошибка? - PullRequest
31 голосов
/ 24 ноября 2008

В таких средах журналирования, как log4j и log4net, вы можете регистрировать различные уровни информации. Большинство уровней имеют очевидные намерения (например, что такое журнал «Отладка» против «Ошибка»). Однако, одна вещь, над которой я всегда был застенчивым, классифицировала мою регистрацию как «Фатальную».

Какие типы ошибок настолько серьезны, что их следует классифицировать как фатальные? Хотя это слегка обусловлено регистром, каковы некоторые из практических правил, которые вы используете при выборе между регистрацией исключения как фатальной или просто ошибкой?

Ответы [ 4 ]

37 голосов
/ 24 ноября 2008

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

Примеры фатальных ошибок:

  • Недостаточно дискового пространства на регистрирующем устройстве, и вам необходимо продолжать ведение журнала.
  • Полная потеря сетевого подключения в клиентском приложении.
  • Отсутствует информация о конфигурации, если нельзя использовать по умолчанию.

Неустранимые ошибки:

  • Сервер, на котором по какой-то причине происходит сбой одного сеанса, но вы все равно можете обслуживать других клиентов.
  • Временная ошибка, такая как потерянный сеанс, если может быть установлен новый сеанс.
  • Отсутствует информация о конфигурации, если можно использовать значение по умолчанию.
6 голосов
/ 24 ноября 2008

Ошибка является фатальной, если что-то отсутствует или возникает ситуация, из-за которой приложение просто не может продолжить работу. Возможные примеры: отсутствующий обязательный config.file или когда исключение «всплывает» и перехватывается необработанным обработчиком исключений

2 голосов
/ 24 ноября 2008

Я бы использовал fatal, если бы моим следующим шагом было прекращение работы приложения или просто не выполнять дальнейшую работу. Если приложение является частью пакета или запущено несколько процессов, это может быть полезно для отслеживания произошедшего.

Если есть вероятность восстановления (например, потеря сетевого соединения с повторными попытками на некоторое время), я бы не использовал фатальный.

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

1 голос
/ 24 ноября 2008

Чтобы этот ответ был коротким и приятным, в случае сбоя вашего приложения я бы счел это фатальным. Если вы не можете подключиться к важному ресурсу, такому как база данных или необходимая служба, это будет фатальным. В целом, я бы сказал, что если это не позволяет вашему приложению работать правильно и влияет на пользователя, я бы отнес его к фатальной ошибке.

Но самый важный способ классификации ошибок - это последовательное следование практическому правилу, такому как правило 69 в C ++ Стандарты кодирования :

«Разработайте практическую, последовательную и рациональную политику обработки ошибок на ранних этапах проектирования, а затем придерживайтесь ее».

...