Кто разработал безошибочную программную систему, поднимите руку?
Как сказал мифический Дийкстра:
Тестирование программы может быть использовано для того, чтобы показать наличие ошибок, но не для того, чтобы показать их отсутствие!
А что обычно спасает нас от очень неприятных ситуаций после выпуска нашего продукта? Хорошая система журналов и надежная система отслеживания ошибок. С тех пор, как я стал старшим разработчиком (достаточно 20 лет опыта? Я еще не знаю, мне нужно многому научиться) на начальных этапах разработки новый проект Я трачу много времени на настройку хорошего подхода к логированию и отслеживанию ошибок.
Почти все мои коллеги знают, как сильно я люблю в мире .Net библиотеку протоколирования NLog и платформу Sentry для обработки ошибок.
Настройка этих двух систем для совместной работы — не такая уж сложная работа, но для того, чтобы сделать это наилучшим образом, требуется несколько очень специфических аспектов.
NLog + Сторожевой
Прежде всего, мы должны помнить, что существует официальная версия библиотеки для интеграции обоих, выпущенная командой Sentry: https://github.com/getsentry/sentry-dotnet, которая очень хорошо работает как .net-логгер, так и в качестве цели NLog.
Его конфигурация очень проста, и у нас есть много руководств и учебных пособий, чтобы интегрировать его с помощью нескольких строк конфигурации.
PS: через несколько недель должна выйти новая версия с важными новостями, включая https://github.com/getsentry/sentry-dotnet/pull/336.
Мы приходим к моей стандартной конфигурации, которую я использую в качестве основы для каждого нового проекта:
Как уже упоминалось, файл конфигурации действительно прост, у нас есть различные цели, и правило для Sentry активируется только тогда, когда в журнал записывается событие с минимальным уровнем, равным Error.
Что происходит в этот момент? Просто при каждом событии ошибки NLog будет использовать цель Sentry для передачи всей информации в удаленную систему слежения.
Но уверены ли мы, что у нас есть вся информация, необходимая для реального представления о том, что происходит в нашем программном обеспечении? При такой простой конфигурации очень полезная функциональность Sentry ничуть не используется: хлебные крошки!
Хлебные крошки — это информация, которая собирается и буферизуется Sentry и отправляется при возникновении ошибки. В случае интеграции с NLog хлебные крошки — это сообщения, выдаваемые логгером до возникновения ошибки.
Однако, чтобы использовать эту классную функцию, нам нужно изменить наш файл конфигурации NLog.
В частности, чтобы активировать эту функциональность, мы должны убедиться, что все сообщения, составляющие наши хлебные крошки, а не только ошибки, достигают цели Sentry. Чтобы получить этот эффект, нам нужно только понизить уровень нашего регистратора до Debug
, а затем настроить две опции: minimunBreadcrumbLevel
и minimumEventLevel
на целевом узле Sentry.
Вот пример события, отображаемого Sentry с включенными панировочными сухарями.
Благодаря этому простому изменению конфигурации нам больше не нужно искать необходимую информацию в файлах журналов, локальных для нашего приложения.
Как уже говорилось, в нашем программном обеспечении всегда будут ошибки, или, по крайней мере, мы никогда не будем уверены, что все они исправлены, и поэтому почему бы не подготовиться наилучшим образом, когда произойдет непредвиденное?
Что вы думаете? Скажите мне!
Пожалуйста, подпишитесь и похлопайте! Грейзи!