Table of contents

Laravel

composer require codex-team/hawk.laravel
  • PHP 7.2+
  • Laravel 11.x+
  • автоматический перехват ошибок;
  • ручная отправка исключений и сообщений;
  • добавление данных пользователя;
  • добавление дополнительного контекста;
  • фильтрация чувствительных данных;
  • хук BeforeSend для обработки событий перед отправкой;
  • сбор breadcrumbs: маршруты, запросы к БД, очереди, логи;
  • поддержка Laravel 11+.

Обновите файл bootstrap/app.php:

<?php use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { HawkBundle\Integration::handles($exceptions); }) ->create();

Добавьте Hawk service provider в config/app.php или bootstrap/providers.php:

'providers' => [ // Другие service providers... HawkBundle\ErrorLoggerServiceProvider::class, ],

Выполните команду:

php artisan hawkbundle:publish

Будет создан файл config/hawk.php.

После этого добавьте токен в .env:

HAWK_TOKEN=<your_integration_token>

Добавление данных пользователя и контекста

app(\HawkBundle\Catcher::class)->setUser([ 'name' => 'John Doe', 'photo' => 'https://example.com/avatar.png', ]); app(\HawkBundle\Catcher::class)->setContext([ 'page' => 'checkout', 'cart_id' => 123, ]);

Внедрите \HawkBundle\Catcher через dependency injection и вызовите sendException():

use HawkBundle\Catcher; class TestController extends Controller { private Catcher $catcher; public function __construct(Catcher $catcher) { $this->catcher = $catcher; } public function test() { try { // Код, который может завершиться ошибкой } catch (\Exception $e) { $this->catcher->sendException($e); } } }

Отправка пользовательских сообщений

app(\HawkBundle\Catcher::class)->sendMessage( 'Checkout started', [ 'cart_id' => 123, 'step' => 'payment', ] );

Если вы хотите изменить или отфильтровать данные ошибки перед отправкой в Hawk, реализуйте BeforeSendServiceInterface.

<?php namespace App\Hawk; use Hawk\EventPayload; use HawkBundle\Services\BeforeSendServiceInterface; class BeforeSendService implements BeforeSendServiceInterface { public function __invoke(EventPayload $eventPayload): ?EventPayload { $user = $eventPayload->getUser(); // Удаление чувствительных данных if (!empty($user['email'])) { unset($user['email']); $eventPayload->setUser($user); } // Пропуск отправки в отдельных случаях if ($eventPayload->getContext()['skip_sending'] ?? false) { return null; } return $eventPayload; } }

Зарегистрируйте сервис в config/hawk.php:

return [ 'integration_token' => env('HAWK_TOKEN'), 'before_send_service' => \App\Hawk\BeforeSendService::class, ];
  • Нашли баг — создайте issue.
  • Хотите улучшить пакет — pull request приветствуются.