Блог Горошко Андрея 1C-Битрикс Обработка ошибок и исключений в D7: Класс Bitrix\Main\Diag\ExceptionHandler и SystemException

Обработка ошибок и исключений в D7: Класс Bitrix\Main\Diag\ExceptionHandler и SystemException

Старый подход «вернуть false и записать ошибку в LAST_ERROR» уходит в прошлое. В D7 используется механизм исключений (Exceptions), который делает код более надежным и предсказуемым.

1. Иерархия исключений

Все исключения ядра наследуются от \Exception. Основные типы:

  • \Bitrix\Main\SystemException: Базовое системное исключение.
  • \Bitrix\Main\ArgumentException: Неверный аргумент функции.
  • \Bitrix\Main\ArgumentNullException: Аргумент не должен быть пустым.
  • \Bitrix\Main\ArgumentTypeException: Неверный тип аргумента.
  • \Bitrix\Main\ObjectNotFoundException: Объект не найден.
  • \Bitrix\Main\Db\SqlQueryException: Ошибка в SQL-запросе.

2. Правильный блок try-catch

Оборачивайте рискованные операции (запросы к БД, внешним API, работу с файлами) в блок try-catch.

use Bitrix\Main\Loader;
use Bitrix\Main\SystemException;
use Bitrix\Main\ArgumentException;

try {
    if (!Loader::includeModule('my.module')) {
        throw new SystemException('Модуль my.module не найден');
    }

    $result = MyClass::doSomething($params);
    
    if (!$result) {
        throw new SystemException('Ошибка выполнения операции');
    }

} catch (ArgumentException $e) {
    // Ошибка в аргументах (например, неверный тип)
    echo "Ошибка входных данных: " . $e->getMessage();
} catch (SystemException $e) {
    // Системная ошибка
    // Записываем в лог
    $application = \Bitrix\Main\Application::getInstance();
    $application->getExceptionHandler()->writeToLog($e);
    
    echo "Произошла внутренняя ошибка. Мы уже работаем над этим.";
} catch (\Exception $e) {
    // Любые другие ошибки
    echo "Неизвестная ошибка: " . $e->getMessage();
}

3. Логирование ошибок (ExceptionHandler)

Чтобы ошибка не пропала бесследно, её нужно записать в журнал. В D7 для этого есть ExceptionHandler.

use Bitrix\Main\Application;

try {
    // ... код ...
} catch (\Throwable $e) {
    // Получаем обработчик ошибок
    $exceptionHandler = Application::getInstance()->getExceptionHandler();
    
    // Пишем исключение в лог (по умолчанию в /bitrix/modules/main.log или системный лог)
    $exceptionHandler->writeToLog($e);
}

Настройки логирования задаются в файле .settings.php в секции exception_handling. Там можно указать путь к лог-файлу, уровень детализации и т.д.

Вывод:
Использование исключений позволяет четко разделить «нормальный» ход выполнения программы и обработку аварийных ситуаций.

Всегда ловите исключения и обязательно логируйте их через ExceptionHandler для последующего анализа.

обработка ошибок битрикс, исключения D7, SystemException, ArgumentException, try-catch, ExceptionHandler, логирование ошибок, writeToLog

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

1С-Битрикс основные функции вывода в шаблонах1С-Битрикс основные функции вывода в шаблонах

В 1С-Битрикс основные и часто используемые функции вывода в шаблонах это: Некоторые из этих функций могут быть полезны при работе с шаблонами сайта. Например, функция AddBufferContent() может использоваться для добавления блока

Разработка интернет-магазина гидравлического оборудования, насосов и РВД на 1С-БитриксРазработка интернет-магазина гидравлического оборудования, насосов и РВД на 1С-Битрикс

Создание специализированного интернет-магазина гидравлического оборудования, насосов и РВД на 1С-Битрикс требует профессионального подхода к структуре каталога и алгоритмам оформления заказов. Для направления «гидравлического оборудования, насосов и РВД» важно реализовать калькулятор

Разработка интернет-магазина на 1С-Битрикс с динамическим весовым чеком и интеграцией с весамиРазработка интернет-магазина на 1С-Битрикс с динамическим весовым чеком и интеграцией с весами

Внедрение функционала «с динамическим весовым чеком и интеграцией с весами» на платформе 1С-Битрикс позволяет существенно повысить средний чек, сократить операционные расходы и предоставить покупателям первоклассный сервис. холдирование суммы заказа и