При регистрации когда фатальная ошибка?
В каркасах журналирования, таких как log4j и log4net, у вас есть возможность регистрировать различные уровни информации. Большинство уровней имеют очевидные намерения (например, что такое журнал "Отладка" против "Ошибка"). Однако, одна вещь, над которой я всегда был робким, классифицировала мою регистрацию как "Фатальную".
Какие типы ошибок настолько серьезны, что их следует классифицировать как фатальные? Хотя это слегка обусловлено регистром, каковы некоторые из практических правил, которые вы используете при выборе между регистрацией исключения как фатальной или просто ошибкой?
4 ответа
Я считаю фатальные ошибки, когда ваше приложение не может делать больше полезной работы. Не фатальные ошибки - это когда есть проблема, но ваше приложение может продолжать функционировать даже при сниженном уровне функциональности или производительности.
Примеры фатальных ошибок включают в себя:
- Недостаточно дискового пространства на устройстве регистрации, и вам необходимо продолжать ведение журнала.
- Полная потеря сетевого подключения в клиентском приложении.
- Отсутствует информация о конфигурации, если нельзя использовать по умолчанию.
Не фатальные ошибки будут включать:
- Сервер, на котором по какой-то причине происходит сбой одного сеанса, но вы все равно можете обслуживать других клиентов.
- Периодическая ошибка, такая как потерянный сеанс, если может быть установлен новый сеанс.
- Отсутствует информация о конфигурации, если можно использовать значение по умолчанию.
Ошибка является фатальной, если что-то отсутствует или возникает ситуация, из-за которой приложение может просто не продолжить работу. Возможные примеры: отсутствующий обязательный config.file, или когда исключение "всплывает" и перехватывается необработанным обработчиком исключений.
Я бы использовал фатальный, если мой следующий шаг - приложение закрывается или просто не выполняет дальнейшую работу. Если приложение является частью пакета или запущено несколько процессов, это может быть полезно для отслеживания произошедшего.
Если есть вероятность восстановления (например, потеря сетевого подключения с повторными попытками на некоторое время), я бы не использовал фатальный.
Если у меня есть несколько служебных потоков, активированных основным потоком, и один из них выходит из строя из-за неправильного ввода, но приложение все еще может обслуживать новые запросы, я не считаю это фатальным.
Чтобы этот ответ был коротким и приятным, если ваше приложение вылетает, я считаю это фатальным. Если вы не можете подключиться к важному ресурсу, такому как база данных или необходимая служба, это будет фатальным. В целом, я бы сказал, что если это не позволяет вашему приложению работать правильно и влияет на пользователя, я бы отнес его к фатальной ошибке.
Но самый важный способ классификации ошибок - это последовательное следование эмпирическому правилу, такому как правило 69 в стандартах кодирования C++:
"Разработайте практическую, последовательную и рациональную политику обработки ошибок на ранних этапах проектирования, а затем придерживайтесь ее".