webpractik/sentry

Module sending logs to sentry

v2.1.0 2020-12-10 10:18 UTC

This package is auto-updated.

Last update: 2021-04-10 11:01:30 UTC


README

Описание

Модуль для отправки PHP ошибок Bitrix в Sentry
Класс модуля отнаследован от Bitrix\Main\Diag\FileExceptionHandlerLog

Требования

  • Composer
  • Версия PHP >= 7.2

Установка

Установка пакета

composer require webpractik/sentry

Настройка

Подключение composer autoload

В файле 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'

Получение переменных из .env файла

Вместе с пакетом зависимостью устанавливается библиотека 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

Чтобы наш обработчик перехватывал ошибки, нужно его прописать в файле 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>,
    ),

Миграция с версии 1.0

  1. Удалить ключи extension и required_file из файла bitrix/.settings.php
  2. В class_name изменить класс на '\\Webpractik\\Sentry\\SentryException'
  3. Деактивировать и удалить модуль в админ панели
  4. В файле composer.json изменить версию пакета webpractik/sentry на ^2.0
  5. Выполнить в консоли composer update webpractik/sentry
  6. Сбросить кеш загрузчика composer, если возникнут ошибки composer dump-autoload