Модуль для отправки PHP ошибок Bitrix в Sentry
Класс модуля отнаследован от Bitrix\Main\Diag\FileExceptionHandlerLog
- Composer
- Версия PHP >= 7.2
Установка пакета
composer require webpractik/sentry
В файле init.php
требуется подключить composer autoload, если этого еще не сделано
require_once($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');
Для получения окружения и URL используется функция getenv()
, поэтому в .env файле нужно определить две переменные:
APP_ENV=production
SENTRY_DSN=https://<key>@sentry.io/<project>
Чтобы при разработке на локальной версии сайта ошибки не отправлялись в Sentry, нужно в переменной APP_ENV указать значение 'local'. На production-сервер должно быть установлено 'production'
Вместе с пакетом зависимостью устанавливается библиотека vlucas/phpdotenv
, посредством которой можно получить переменные из .env
(по умолчанию) файла
Для этого в init.php
нужно прописать:
if (class_exists('Dotenv\\Dotenv')) {
$env = Dotenv\Dotenv::createImmutable($_SERVER['DOCUMENT_ROOT']);
// Если на проекте используется другое имя файла, его можно задать вторым параметром
// пример, $env = Dotenv\Dotenv::createImmutable($_SERVER['DOCUMENT_ROOT'], '.environment');
try {
$env->load();
} catch (InvalidFileException | InvalidPathException $e) {
}
}
В метод createImmutable
нужно указать путь к файлу .env (или .environment)
В примере указана проверка на существование класса Dotenv, чтобы при первом деплое на production-сервер не вызвать ошибку (пока не отработает composer install)
Если у вас уже установлен Laravel, то может возникнуть ошибка конфликта версий пакета vlucas/phpdotenv
, проверьте что установили подходящий.
Подключение для старой (^3.3) версии пакета тоже отличается:
if (class_exists('Dotenv\\Dotenv')) {
$env = Dotenv\Dotenv::create($_SERVER['DOCUMENT_ROOT']); // изменение тут, в старой версии нет метода createImmutable
// Если на проекте используется другое имя файла, его можно задать вторым параметром
// пример, $env = Dotenv\Dotenv::create($_SERVER['DOCUMENT_ROOT'], '.environment');
try {
$env->load();
} catch (InvalidFileException | InvalidPathException $e) {
}
}
Чтобы наш обработчик перехватывал ошибки, нужно его прописать в файле bitrix/.settings.php
, в секцию
[exception_handling][value][log]
'class_name' => '\\Webpractik\\Sentry\\SentryException'
Например:
'exception_handling' =>
array (
'value' =>
array (
'debug' => <bool>,
'handled_errors_types' => <int>,
'exception_errors_types' => <int>,
'ignore_silence' => <bool>,
'assertion_throws_exception' => <bool>,
'assertion_error_type' => <int>,
'log' =>
array (
'settings' =>
array (
'file' => '<path_to_error_log>/error.log',
'log_size' => <int>,
),
'class_name' => '\\Webpractik\\Sentry\\SentryException',
),
),
'readonly' => <bool>,
),
- Удалить ключи
extension
иrequired_file
из файлаbitrix/.settings.php
- В
class_name
изменить класс на'\\Webpractik\\Sentry\\SentryException'
- Деактивировать и удалить модуль в админ панели
- В файле
composer.json
изменить версию пакетаwebpractik/sentry
на ^2.0 - Выполнить в консоли
composer update webpractik/sentry
- Сбросить кеш загрузчика composer, если возникнут ошибки
composer dump-autoload