Кто разработал безошибочную программную систему, поднимите руку?

Как сказал мифический Дийкстра:

Тестирование программы может быть использовано для того, чтобы показать наличие ошибок, но не для того, чтобы показать их отсутствие!

А что обычно спасает нас от очень неприятных ситуаций после выпуска нашего продукта? Хорошая система журналов и надежная система отслеживания ошибок. С тех пор, как я стал старшим разработчиком (достаточно 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 с включенными панировочными сухарями.

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

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

Что вы думаете? Скажите мне!

Пожалуйста, подпишитесь и похлопайте! Грейзи!