Table of contents

PHP

В этой инструкции описано, как подключить Хоук к PHP-проектам. После настройки вы будете получать уведомления о сбоях вместе со стеком вызовов, данными пользователя и контекстом, которые вы задаёте сами. В среде веб-сервера к событию добавляются HTTP-заголовки (поле Cookie вырезается перед отправкой) и сведения об окружении (в том числе hostname). Это ускоряет отладку и повышает стабильность продукта.

  1. Зарегистрируйтесь в Hawk и получите интеграционный токен проекта.
  2. Установите пакет через Composer.
  3. Вызовите Catcher::init как можно раньше в точке входа приложения.
  4. По желанию задайте release, свой URL коллектора (url) и другие параметры.
  • PHP ^7.2 || ^8.0
  • Расширения: ext-curlext-json
composer require codex-team/hawk.php

Отдельного CDN нет — только Composer и PSR-4 автозагрузка.

require_once__DIR__.'/vendor/autoload.php';

Кэтчер — синглтон: первый вызов Catcher::init() создаёт экземпляр; повторные вызовы init не переконфигурируют кэтчер (второй и далее фактически не меняют уже созданный экземпляр).

Минимум:

\Hawk\Catcher::init([ 'integrationToken' => 'ВАШ_ТОКЕН_ИНТЕГРАЦИИ', ]);

Допустимы ключи в snake_case: integration_tokenerror_typesbefore_sendcapture_silenced_errors.

После init автоматически подключаются:

  • set_error_handler — ошибки PHP;
  • set_exception_handler — неперехваченные исключения;
  • register_shutdown_function — фатальные ошибки на завершении скрипта.

Доступ к экземпляру:

$catcher=\Hawk\Catcher::get();

Без предварительного init вызов get() приведёт к исключению.

Параметр
integrationToken / integration_token string Обязательный интеграционный токен
url string URL коллектора; по умолчанию https://k1.hawk.so/
release string Идентификатор релиза / сборки
errorTypes / error_types int | null Маска уровней ошибок; null = как error_reporting()
captureSilencedErrors / capture_silenced_errors bool Учитывать ошибки с @
beforeSend / before_send callable | null См. раздел «Фильтрация»
timeout int Таймаут HTTP к коллектору (секунды), по умолчанию 2

Отдельной опции «отключить глобальные обработчики» нет — при init обработчики регистрируются всегда.

\Hawk\Catcher::get() ->setUser([ 'id' => '42', 'name' => 'Имя', 'photo' => 'https://example.com/avatar.png', ]) ->setContext([ 'environment' => 'production', ]);

Исключение:

try { throw new \RuntimeException('Ошибка'); } catch (\Throwable $e) { \Hawk\Catcher::get()->sendException($e); }

Вторым аргументом — дополнительный контекст на событие (смержится с глобальным).

Сообщение:

\Hawk\Catcher::get()->sendMessage('Сообщение', ['key' => 'value']);

Хук получает Hawk\EventPayload.

  • Вернуть null — событие не отправляется.
  • Вернуть EventPayload — уходит он (в т.ч. после правок через сеттеры).
  • Иной тип — в лог PHP пишется предупреждение, отправляется исходный payload (см. Handler::buildEvent).

Пример:

\Hawk\Catcher::init([ 'integrationToken' => 'ВАШ_ТОКЕН', 'beforeSend' => function (\Hawk\EventPayload $eventPayload) { $user = $eventPayload->getUser(); if (!empty($user['email'])) { unset($user['email']); $eventPayload->setUser($user); } return $eventPayload; }, ]);
  • Headers — из getallheaders() / $_SERVER; Cookie удаляются.
  • Environment — например hostname.
  • Стек — через построитель фреймов и сериализатор.

Ошибки с @ и PHP 8

Поведение «подавленных» ошибок и флага capture_silenced_errors на PHP 8+ отличается от PHP 7 (см. Handler::handleError). При сомнениях проверьте маску errorTypes и документацию PHP по error_reporting().

Вызовите в коде заведомую ошибку после init или отправьте исключение вручную через sendException / sendMessage и убедитесь, что событие появилось в проекте Hawk.