Bitrix обработка ошибок

Обработка ошибок в Битрикс

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php.

'exception_handling' =>
    array (
        'value' =>
            array (
              'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
              'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
              'ignore_silence' => true,
              'assertion_throws_exception' => false,
              'assertion_error_type' => 256,
              'debug' => true,
              'log' => array (
                            'settings' => array (
                            'file' => 'bitrix/modules/error.log',
                            'log_size' => 1000000,
                            ),
            ),
    ),
),
  • handled_errors_types — типы обрабатываемых ошибок

  • exception_errors_types — типы ошибок, в случае которых системой выбрасывается исключение, и работа скрипта останавливается

  • ignore_silence — отменить действие оператора подавления ошибок (значок @ перед функцией, например @file(), документация).

  • assertion_throws_exception — выбрасывают ли утверждения (assert()) исключения.

  • assertion_error_type — тип ошибки для неверного утверждения (по умолчанию — 256 E_USER_ERROR)

  • debug — если выставить debug = true, информация об ошибке будет выведена пользователю в браузер. Если debug = false, при возникновении ошибки будет выведено стандартное сообщение от Битрикс, кроме ошибок E_ERROR | E_PARSE

if ($this->debug)
{
    error_reporting($this->handledErrorsTypes);
    @ini_set('display_errors', 'On');
    @ini_set('display_startup_errors', 'On');
    @ini_set('report_memleaks', 'On');
}
else
{
    error_reporting(E_ERROR | E_PARSE);
}

При отключении режима отладки, также сбрасываются настройки для assert()

if ($this->debug)
{
  assert_options(ASSERT_ACTIVE, 1);
  assert_options(ASSERT_WARNING, 0);
  assert_options(ASSERT_BAIL, 0);
  assert_options(ASSERT_QUIET_EVAL, 0);
  assert_options(ASSERT_CALLBACK, array($this, "handleAssertion"));
}
else
{
   assert_options(ASSERT_ACTIVE, 0);
}
  • log — секция с указанием логгера. Если пусто, то запись ошибок происходить не будет. В данном случае по умолчанию всю работу на себя возьмет объект класса BitrixMainDiagFileExceptionHandlerLog.
  • settings — секция с настройками обработчика ошибок. Можно задавать произвольные параметры. Они все передадутся массивом в метод initialize() обработчика.
  • file — относительный путь к файлу логов от корневой директории сайта (BitrixMainApplication::getDocumentRoot().’/’.$file).
  • log_size — максимальный размер файла логов в байтах.

Можно использовать собственный обработчик ошибок для записи логов. Для этого в секции log нужно указать:

'class_name' => 'MyLog',
'extension' => 'MyLogExt',
'required_file' => 'modules/mylog.module/mylog.php'
  • class_name — имя класса-обработчика. Класс должен наследоваться от BitrixMainDiagExceptionHandlerLog. Метод write в 16 версии отличается от реализации в 15 версии, эта несовместимость может сломать сайт, будьте внимательны.
  • extension — подключаемое расширение, содержащее класс-обработчик
  • required_file — файл, содержащий нужный класс.

Модули АХТУНГ 500 И АХТУНГ 500 ПРО

Модули Ахтунг 500 и Ахтунг 500 ПРО предназачены для мгновенного оповещения об ошибках по e-mail и через браузер, когда администратор находится на сайте.

Мониторинг ошибок происходит не только через обработчик ошибок Битрикса, но и через чтение файлов логов сервера, есть поиск.

Перейти к подробному описанию Ахтунг 500 ПРО

Всем привет.
Продолжаем познавать нововведения нового ядра продукта.

На этот раз — это подключение собственного обработчика ошибок для всего продукта.

За обработку ошибок отвечает блок exception_handling в файле настроек /bitrix/.settings.php
В данном блоке есть параметр log, в котором можно добавить опции:

'class_name' => 'MyTest',
'extension' => '',
'required_file' => 'modules/mylog.module/lib/log.php',

в данном случае, уже указаны мои тестовые значения.
По названию, я думаю, понятно, что за что отвечает.

Двигаем далее. Мы указали подключение файла modules/mylog.module/lib/log.php, его и создадим.

<?php
class MyTest
   extends BitrixMainDiagExceptionHandlerLog
{
   private $URL;

   public function initialize(array $options)
   {
      $this->URL = $options["send_url"];
   }

   public function write(Exception $exception, $logType)
   {
      $title = BitrixMainDiagExceptionHandlerFormatter::severityToString($exception->getSeverity());
      $text = $exception->getMessage();
      $text .= "n".$exception->getFile()."[".$exception->getLine()."]";
      $this->SendError($title,$text);
   }

   protected function SendError($title,$text)
   {
      $data = array('name' => $title, 'text' => $text);
      $sock = new CHTTP();
      $sock->Post($this->URL,$data);
   }
}
 

Как видно, класс тот, что указан в конфигурационном файле. Данный класс должен быть унаследован от BitrixMainDiagExceptionHandlerLog
Обязательных 2 функции initialize и write.
Собственно первая вызывается для инициализации, а вторая для обработки ошибки.

В функции инициализации у меня просто заполняется переменная, значение для которой передается из .settings.php
В функции записи производится подготовка текста ошибок для отправки.

Затем вызывается SendError, которая отправляет данные мне на компьютер, на специальный скрипт. Как итог, на экране я вижу возникающие ошибки.
shot_711.png

bug_report Обработка ошибок

Как перестать беспокоиться и начать программировать? Попробуйте использовать PHPUnit в Битрикс!

Обработка ошибок в Битрикс

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php:

'exception_handling' =>
  array (
    'value' =>
      array (
        'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
        'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
        'ignore_silence' => true,
        'assertion_throws_exception' => false,
        'assertion_error_type' => 256,
        'debug' => true,
        'log' => array (
              'settings' => array (
              'file' => 'bitrix/modules/error.log',
              'log_size' => 1000000,
              ),
      ),
  ),
),

Можно использовать собственный обработчик ошибок для записи логов. Для этого в секции log нужно указать:

'class_name' => 'MyLog',
'extension' => 'MyLogExt',
'required_file' => 'modules/mylog.module/mylog.php'

https://bitrixsolutions.ru/docs/bitrix_errors/ — человек грамотно сделал обработку ошибок, вот что мне понравилось: Logger::SHIT_HAPPENS, Logger::VOVA_POMOGI

Отправка сообщения об ошибке на почту

При разработке под Битрикс можно пользоваться не только логами, установленными в конфигурации сервера, но и своими. Для этого нужно настроить обработчик ошибок в секции exception_handling в файле /bitrix/.settings.php

'exception_handling' =>
  array (
    'value' =>
      array (
        'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,
        'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING,
        'ignore_silence' => true,
        'assertion_throws_exception' => false,
        'assertion_error_type' => 256,
        'debug' => true,
        'log' => array (
              'settings' => array (
              'file' => 'bitrix/error.log',
              'log_size' => 10000000,
              ),
      ),
  ),
),

Можно использовать кастумный обработчик ошибок для записи логов. Конфигурируется это так:

'class_name' => 'UserLog',
'extension' => 'UserLogExt',
'required_file' => 'modules/mylog.module/mylog.php'

Также возможна отправка сообщения об ошибке на почту ( https://dev.1c-bitrix.ru/api_help/main/functions/debug/senderror.php ):

SendError(
 string text,
 string module_id = ""
);

  1. Главная
  2. Сниппеты Битрикс d7

Обработка исключений битрикса

Модуль расширенного управления меню для битрикс

Август 19, 2019

Теги:
Отладка, Основное

Обработка исключений, «вброшенных» стандартным классом битрикс «BitrixMainSystemException».

Пример обработки ошибочного преобразования json функцией «BitrixMainWebJson::decode»:


try {

    
$arRes BitrixMainWebJson::decode($result);
} catch (
BitrixMainSystemException $e) {
    
$error true//$e->getMessage();
}

Пример самостоятельного «вбрасывания» исключения:


try {

    throw new 
BitrixMainSystemException("Error");
} catch (
BitrixMainSystemException $e) {
    
$error true//$e->getMessage();
}

← Переход к списку

Главная
G-Web IT. Битрикс-интегратор. Сложный ecommerce и нестандартные интеграции.
G-Web IT

Адрес:
Летная улица, 30, корпус 1
141021
Мытищи,

Телефон:+7 985 513–06–60,
Электронная почта: info@goldwebit.net

По будням с 10:00 до 20

Битрикс файл bitrix/.settings.php

Секция exception_handling

Отвечает за обработку ошибок.


 'exception_handling' => array (
  'value' => array (
  'debug' => false,
  'handled_errors_types' => E_ALL & ~E_NOTICE &
~E_STRICT & ~E_USER_NOTICE,
  'exception_errors_types' => E_ALL & ~E_NOTICE &
~E_WARNING & ~E_STRICT & ~E_USER_WARNING &
~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
   'ignore_silence' => false,
  'assertion_throws_exception' => true,
  'assertion_error_type' => 256,
  'log' => array (
   'settings' => array (
    'file' => 'bitrix/modules/error.log',
    'log_size' => 1000000,
   ),
   ),
  ),
   'readonly' => false,
 ),

Параметр Значение
debug Ключ отвечает за то, будет ли выведена ошибка на страницу в браузере.
Выводить ошибки рекомендуется только на время разработки или отладки.
Иначе потенциально может быть разглашение информации.
handled_errors_types В ключе задаются типы ошибок, которые система отлавливает (не игнорирует).
exception_errors_types В ключе задаются типы ошибок, при которых система выбрасывает исключение.
ignore_silence Ключ отменяет действие оператора управления ошибками (@).
log В ключе задаются параметры логирования ошибок.
Если ключа нет — логирования не будет.
Если задать как показано в примере:

'log' => array (
   'settings' => array (
      'file' => 'bitrix/modules/error.log',
      'log_size' => 1000000,
   ),
),

то логироваться будет в файл с ограничением его размера. Если в корне сайта лежит файл error.php и выключен вывод ошибок на экран, то этот файл будет подключен в случае возникновения необработанного исключения. Если задать в общем случае, то можно логгировать куда угодно:

'log' => array(
   'class_name' => 'MyLog', 


   'extension' => 'MyLogExt', 
   'required_file' => 'modules/mylog.module/mylog.php' 

   'settings' => array( 
      ),
),

В приведенном примере: class_name - пользовательский класс, наследуемый от ExceptionHandlerLog.
Может быть не указан. 
В этом случае будет использоваться BitrixMainDiagFileExceptionHandlerLog.
extension - расширение PHP, использовать можно только вместе с class_name.
required_file - включаемый файл. Используется только вместе с class_name.
settings - настройки для класса, указанного в class_name

assertion_throws_exception Включение поддержки команды assert.
assertion_error_type В ключе задаются типы ошибок, для которых не верный assert выбрасывает исключение.

В handled_errors_types, exception_errors_types, assertion_error_type необходимо передать тип ошибки. Тип ошибки представляет из себя числовой код. Но коды знать и помнить не нужно. Например, параметр exception_errors_types. Что означает данная запись: E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING?

Возврат к списку

Если на экране появилась ошибка:

При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php

Открываем файл .settings.php находим debug и заменяем false на true:

'exception_handling' =>
array (
'value' =>
array (
'debug' => false, // изменяем значение на true
'handled_errors_types' => 20853,
'exception_errors_types' => 20853,
'ignore_silence' => false,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' =>
array (
'settings' =>
array (
'file' => NULL,
'log_size' => NULL,
),
),
),
'readonly' => false,
),

В результате чего на экране будет подробное описание ошибки:

[Error]
Class 'Assets' not found (0)
D:worklocalhost11wwwlocaltemplatesvoguis_indexheader.php:17
#0: include_once
D:worklocalhost11wwwbitrixmodulesmainincludeprolog_after.php:96
#1: require(string)
D:worklocalhost11wwwbitrixmodulesmainincludeprolog.php:11
#2: require_once(string)
D:worklocalhost11wwwbitrixheader.php:1
#3: require(string)
D:worklocalhost11wwwindex.php:2

Понравилась статья? Поделить с друзьями:
  • Bitrix логирование ошибок php
  • Bitrix лог ошибок php
  • Bitrix лог ошибок mysql
  • Bitrix как посмотреть ошибки
  • Bitrix как включить вывод ошибок