Как можно активировать и использовать глобальный обработчик исключений (exception_handling) в файле .settings.php?

Как настроить класс GlobalLogHandler для регистрации ошибок и исключений в Bitrix, используя настройки exception_handling в файле .settings.php?
  • 15 августа 2024 г. 9:03
Ответы на вопрос 2
Для активации и использования глобального обработчика исключений в файле .settings.php в Bitrix необходимо выполнить следующие шаги:

1. Откройте файл .settings.php в корне вашего проекта Bitrix.
2. Найдите раздел "exception_handling" (если его нет - добавьте его) и укажите следующие параметры:
```php
'exception_handling' => array(
	'value' => array(
		'debug' => false, // Установите значение 'true' для отображения сообщений об ошибках на экране
		'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE, // Укажите типы ошибок, которые нужно обрабатывать
		'exception_errors_types' => E_ALL, // Укажите типы исключений, которые нужно обрабатывать
		'ignore_silence' => false, // Установите значение 'true' для игнорирования использования оператора '@'
		'assertion_throws_exception' => true, // Установите значение 'true' для преобразования ошибок утверждений в исключения
		'assertion_error_type' => 256, // Укажите тип ошибки для ошибок утверждений
		'log' => array( // Параметры логирования ошибок и исключений
			'class_name' => '\\Bitrix\\Main\\Diag\\FileExceptionHandler', // Укажите класс для обработки логирования
			'extension' => 'log', // Расширение лог-файла
			'log_size' => 1000000, // Максимальный размер лог-файла
		),
	),
	'readonly' => false, // Установите значение 'true', чтобы предотвратить изменение параметров через админ-панель
),
```

3. Для настройки класса GlobalLogHandler добавьте следующие строки после указания класса для логирования в параметрах 'exception_handling':
```php
'exception_handlers' => array(
	0 => array(
		'handler' => '\\GlobalLogHandler', // Укажите класс GlobalLogHandler для обработки исключений
		'args' => array(),
	),
)
```

4. Создайте файл GlobalLogHandler.php в корне вашего проекта Bitrix и добавьте в него следующий код:
```php
<?php

use Bitrix\Main\Diag\ExceptionHandler;

class GlobalLogHandler extends ExceptionHandler
{
    public function write(\Exception $exception, $logType)
    {
        // Логирование ошибки или исключения
        // Например, можно использовать запись в файл, базу данных, отправку уведомления и т.д.

        // Пример записи в файл по умолчанию log_exceptions.log
        $logPath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/logs/';
        $logFile = $logPath . 'log_exceptions.log';

        $logMessage = '[' . date('Y-m-d H:i:s') . '] ' . $logType . ': ' . $exception->getMessage() . PHP_EOL;
        $logMessage .= 'Code: ' . $exception->getCode() . PHP_EOL;
        $logMessage .= 'File: ' . $exception->getFile() . ' (' . $exception->getLine() . ')' . PHP_EOL;
        $logMessage .= 'Stack trace: ' . PHP_EOL . $exception->getTraceAsString() . PHP_EOL . PHP_EOL;

        file_put_contents($logFile, $logMessage, FILE_APPEND);
    }
}
?>
```

Теперь глобальный обработчик исключений и настройка класса GlobalLogHandler для регистрации ошибок и исключений будет активирована и работать в вашем проекте Bitrix. Все ошибки и исключения будут логироваться в указанный файл log_exceptions.log в папке /bitrix/logs/. Обратите внимание, что вы можете настроить логирование таким образом, чтобы ошибки отправлялись на email
Дока 
Не так
'className' => '\Namespace\GlobalLogHandler',

А так
'class_name' => '\Namespace\GlobalLogHandler',
Похожие вопросы