Я пытаюсь настроить Sentry в своем проекте non-framework-php. Это работает как шарм, но меня беспокоит одна вещь:
Кодекс очень строгий и подверженный уведомлениям. Представляя, что отправка для каждого клика пользователя иногда 50 уведомлений для часового представляется большой затратами. (И нет, к сожалению, исправить все это не в бюджете!)
Итак, мой вопрос: есть ли способ сообщить часовому просто отправить ошибки с уровнем WARNING
и выше?
Это мой код:
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
require_once 'Raven/Autoloader.php';
Raven_Autoloader::register();
$client = new Raven_Client('myurl');
$error_handler = new Raven_ErrorHandler($client);
$error_handler->registerExceptionHandler();
$error_handler->registerErrorHandler();
$error_handler->registerShutdownFunction();
Вы должны посмотреть на обработчики, которые вы устанавливаете. Например, вы можете сделать это:
$error_handler = new \Raven_ErrorHandler($client);
$error_handler->registerErrorHandler(true, E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED);
Это только отправило бы определенные ошибки. Я думаю, что ExceptionHandler «безопасен» для добавления, но будьте осторожны с обработчиком завершения работы.
Немного больше информации: shutdownhandler немного «жадный».
Это вызывает handleFatalError
функция, но это обрабатывает БОЛЬШЕ, чем просто фатальные ошибки. Для моей системы (но у меня более сложная система ведения журнала) этого достаточно, но если вы начинаете пропускать ошибки из-за отсутствия функции завершения работы, вы должны создать дочерний класс для ErrorHandler
файл и переопределить это handleFatalError()
функция.
Если вы посмотрите на код, вы увидите, что он вызывает частный getErrorTypesToProcess
, который возвращает дополнительные типы, которые вы можете дать ему, в сочетании с этим списком:
private $validErrorTypes = array(
E_ERROR,
E_WARNING,
E_PARSE,
E_NOTICE,
E_CORE_ERROR,
E_CORE_WARNING,
E_COMPILE_ERROR,
E_COMPILE_WARNING,
E_USER_ERROR,
E_USER_WARNING,
E_USER_NOTICE,
E_STRICT,
E_RECOVERABLE_ERROR,
E_DEPRECATED,
E_USER_DEPRECATED,
);
И это немного большое для меня 🙂
Но, как уже говорилось, вы можете быть, как я, и просто пропустить функцию выключения работает нормально?
Для справки смотрите эти темы:
https://github.com/getsentry/raven-php/issues/168
https://github.com/getsentry/raven-php/pull/181
https://github.com/getsentry/raven-php/issues/266
Других решений пока нет …