Работа по созданию безошибочного приложения продолжается. Но в то же время нам нужно отслеживать ошибки нашего приложения и быстро предпринимать действия. Многие компании пытались решить эту проблему, и одним из лучших на рынке сейчас является Bugsnag .
Они сосредоточены на проблеме обеспечения системы уведомлений об ошибках, которая имеет смысл ошибок и помогает вам предпринимать действия различными способами. В этой статье мы собираемся открыть Bugsnag и интегрировать его в существующее приложение Laravel. Вы можете клонировать демо-приложение из Github, чтобы следовать.
Настройка проекта
Вы можете следовать инструкциям ниже, чтобы настроить демонстрационное приложение (предполагается, что у вас есть рабочая среда PHP, подобная этой ).
/ / clone the repo git clone git @github . com : Whyounes / bugsnag_demo . git cd bugsnag_demo / / update dependencies composer update / / migrate and seed the database php artisan migrate && php artisan db : seed
Создание учетной записи на BugSnag
Прежде чем начать использовать Bugsnag, нам нужно создать новую учетную запись и создать наш новый проект. Вы можете начать с 30-дневной бесплатной пробной версии и перейти на платный план в зависимости от размера вашего приложения. После регистрации вам нужно будет создать новый проект и указать тип вашего проекта. В нашем случае это будет PHP.
Добавление BugSnag в наш проект
Bugsnag предоставляет список уведомителей для различных типов приложений. Мы собираемся установить и настроить пакет уведомлений PHP . В качестве альтернативы, поскольку демонстрационное приложение построено с использованием Laravel 4, вы можете использовать пакет Laravel и следовать руководству по интеграции Laravel, чтобы легко настроить ваш проект, но в этом случае мы воспользуемся более независимым от фреймворка подходом.
- Требуется
bugsnag/bugsnag:2.*
с помощью Composer. - Возьмите ключ вашего проекта API из
project dashboard > settings
в панели управления Bugsnag. Вы можете сохранить свой ключ API в переменных среды или в файле конфигурации в зависимости от приложения. В этом случае мы собираемся добавить его в нашapp/config/app.php
.
// app/config/app.php return array( // ... 'bugsnag_api_key' => 'YOUR KEY' // ... );
Внутри app/start/global.php
мы связываем и настраиваем наш клиент Bugsnag.
// app/start/global.php App : : singleton ( 'bugsnag' , function ( ) { $bugsnag = new Bugsnag_Client ( Config : : get ( 'app.bugsnag_api_key' ) ) ; return $bugsnag ; } ) ; // ...
Настройка внедрения зависимости контейнера зависит от вашего приложения. Вышеуказанный случай характерен для приложений Laravel.
Кроме того, вы можете при желании установить этап выпуска с помощью:
$bugsnag->setReleaseStage(App::environment());
Это приведет к ошибкам журнала Bugsnag только на определенном этапе выпуска приложения.
После создания клиента Bugsnag вы должны присоединить его к вашему обработчику ошибок. Это будет зависеть от того, как вы управляете ошибками и исключениями внутри вашего приложения. Laravel предоставляет fatal
и error
методы, которые принимают обработчик обратного вызова, но вы также можете использовать PHP set_exception_handler и set_error_handler .
// app/start/global.php App : : error ( function ( $exception ) { App : : make ( 'bugsnag' ) - > notifyException ( $exception , null , "error" ) ; } ) ; App : : fatal ( function ( $exception ) { App : : make ( 'bugsnag' ) - > notifyException ( $exception , null , "error" ) ; } ) ;
Метод notifyException
принимает дополнительные метаданные в качестве второго параметра и уровень ошибки в качестве третьего параметра, который по умолчанию будет warning
. Однако, если вы хотите присоединить его непосредственно к обработчикам ошибок и исключений PHP.
$bugsnag = App : : make ( 'bugsnag' ) ; set_error_handler ( array ( $bugsnag , 'errorHandler' ) ) ; set_exception_handler ( array ( $bugsnag , 'exceptionHandler' ) ) ;
Настройка Bugsnag
-
Добавление пользовательских данных к ошибке:
По умолчанию Bugsnag отправляет идентификатор зарегистрированного пользователя с ошибкой, но вы можете изменить это, обновив экземпляр клиента Bugsnag в контейнере.// app/start/global.php App : : make ( 'bugsnag' ) - > setUser ( [ 'email' = > Auth : : check ( ) ? Auth : : user ( ) - > email : 'Guest user' ] ) ;
Теперь мы можем увидеть имя пользователя в деталях ошибки, выбрав вкладку
user
. -
Вы также можете изменить объект ошибки, отправляемый на сервер, используя метод
setBeforeNotifyFunction
который принимает вызываемую функцию в качестве параметра.// app/start/global.php App : : make ( 'bugsnag' ) - > setBeforeNotifyFunction ( function ( $error ) { $error - > setMetaData ( [ "user" = > [ "username" = > Auth : : check ( ) ? Auth : : user ( ) - > username : 'Guest user' ] , "metrics" = > [ "Metric 1" = > "Some data here" ] ] ) ; } ) ;
Если вы заметили на скриншоте выше, у нас есть список вкладок для группировки значимых деталей об ошибке. Мы можем обновить существующие, такие как вкладка
USER
, и добавить новые для метрик и т. Д. -
Чтобы избежать утечки конфиденциальной информации о ваших клиентах или приложениях, вы можете добавить список атрибутов, которые вы хотите отфильтровать, в свой экземпляр клиента Bugsnag. Значение будет отображаться как
[FILTERED]
на вашей приборной панели.// app/start/global.php App : : singleton ( 'bugsnag' , function ( ) { $bugsnag = new Bugsnag_Client ( Config : : get ( 'app.bugsnag_api_key' ) ) ; $bugsnag - > setFilters ( [ 'password' ] ) ; return $bugsnag ; } ) ; // ...
Bugsnag Dashboard
После создания нашей учетной записи Bugsnag и присоединения ее к приложению нам нужно посетить панель инструментов, чтобы изучить различные доступные компоненты. Мы можем выбирать между представлением « Inbox
, которое показывает нам список ошибок в виде списка, который мы можем отфильтровать, или переключаться на страницу графика временной шкалы, нажав на ссылку timeline
в верхней части страницы. Вы можете проверить документацию для получения более подробной информации о приборной панели графика времени.
Давайте сгенерируем некоторые ошибки
В нашем шаблоне просмотра вопросов мы показываем имя пользователя владельца вопроса. Удаляемый пользователь вызовет проблему и выдаст ошибку. ( Trying to get property of non-object
). Если у нас много пользователей, обращающихся к странице вопросов (которую можно смоделировать, запрашивая одну и ту же страницу несколько раз), это может загромождать нашу панель ошибок с одной и той же ошибкой. Если вы заполнили базу данных с помощью команды artisan db:seed
, у вас будет вопрос, назначенный пользователю с идентификатором 10, которого нет в базе данных.
Нам не нужно беспокоиться о повторяющихся ошибках, отображаемых на панели инструментов, и применять к ним любую группировку. После анализа ваших ошибок Bugsnag решит, имеем ли мы дело с повторяющейся или новой ошибкой. Вот пример из нашего приложения.
Мы можем исправить эту ошибку, добавив простой тест перед доступом к свойству username объекта.
// app/views/user/questions.blade.php // ... {{ isset($question->user) ? $question->user->username : 'User deleted' }} //...
фильтры
Чтобы исследовать наши ошибки, Bugsnag предоставляет нам набор фильтров для детализации данных и сбора конкретных сведений об источнике проблемы.
Вы можете отфильтровать ошибки по времени, используя селектор диапазона дат на верхней панели фильтров, или просмотреть все ошибки, выбрав фильтр « all
.
Лучший способ фильтрации ошибок — данные, такие как пользователь, статус ошибки, серьезность, присвоенный X и т. Д. Вы можете проверить в документации список поддерживаемых фильтров. Поскольку Bugsnag анализирует ваши сообщения об ошибках при их отправке, это поможет автоматически заполнить условия поиска для имен хостов, стадии выпуска и т. Д.
Добавление соавторов
Есть большая вероятность, что вы работаете не один над своим проектом, или вы менеджер проекта. Вы можете добавить соавторов проекта, перейдя в верхний правый угол и нажав на ссылку collaborators
.
Bugsnag анализирует ошибки и группирует их соответствующим образом, чтобы избежать длинных повторяющихся списков. После выбора ошибки мы можем назначить ее существующему соавтору или пригласить нового.
Состояние ошибки
Левая боковая панель на приборной панели показывает список ошибок, сгруппированных по статусу ( Открыто, Выполняется, Исправлено, Отложено, Игнорируется ). После выбора ошибки мы можем изменить ее статус в левой верхней панели.
По умолчанию Bugsnag будет показывать только status:open
ошибки, чтобы помочь нам идентифицировать активные ошибки, но мы можем изменить это, используя вышеупомянутые фильтры.
Дремлет и игнорируя ошибки
Если у вас часто возникает ошибка, и ваша команда в настоящее время работает над ее исправлением, вы можете отложить ее на определенный период или с помощью условия.
Если вы хотите игнорировать эту ошибку — что не рекомендуется для производства — вы можете сделать это, используя кнопку игнорирования рядом с опцией повтора в меню действий.
Уведомления третьих сторон
Команды часто используют несколько приложений и сервисов для своего процесса разработки. Bugsnag предлагает список плагинов для уведомлений, которые мы можем настроить для отправки уведомлений о различных типах ошибок. Вы можете уведомлять свою команду о Slack, создавать проблемы на Github, публиковать сообщения в webhook вашего сервера и т. Д.
Slack Уведомления
Перейдите к настройкам нашего проекта и нажмите на ссылку Team Notifications
чтобы отобразить список интеграций, затем выберите Slack.
Нам нужно уточнить, когда нам следует уведомить нас и как часто. Затем нам нужно получить URL-адрес веб-крюка Slack, перейдя по ссылке над вводом, вставить URL-адрес и отправить тестовое уведомление.
Создание проблемы Github
Другой способ действовать в отношении уведомлений об ошибках — создать новую проблему Github. Перейдите к настройкам нашего проекта и щелкните ссылку «Отслеживание проблем», чтобы отобразить список интеграций, затем выберите «Проблемы Github».
Вывод
Bugsnag предоставляет хорошую платформу для автоматизации системы отслеживания ошибок и экономии времени на просмотр журналов, создание сценариев мониторинга и т. Д. Вы можете сосредоточиться на создании приложения, следя за тем, что происходит в вашей рабочей версии.
Bugsnag уже привлек несколько крупных компаний, таких как Github, Cisco, LinkedIn и т. Д. Вы можете начать с создания 30-дневной пробной версии, чтобы изучить доступные функции и перейти на платный план, если он вам действительно нравится. Если вы используете другую платформу для мониторинга ошибок или уже попробовали Bugsnag, сообщите нам, что вы думаете!