Логирование выполнения агентов в 1С-Битрикс. Логирование битрикс


Логирование выполнения агентов в 1С-Битрикс

Нашёл замечательную недокументированную возможность в битриксе. Можно писать в лог брейкпоинты (start, finish) работы выполнения агентов.

Применяем:

if (!defined('BX_AGENTS_LOG_FUNCTION')) { define('BX_AGENTS_LOG_FUNCTION', 'OlegproAgentsLogFunction'); function OlegproAgentsLogFunction ($arAgent, $point){ @file_put_contents( $_SERVER["DOCUMENT_ROOT"] . '/agents_executions_points.log', ( PHP_EOL . date('d-m-Y H:i:s') . PHP_EOL . print_r($point, 1) . PHP_EOL . print_r($arAgent, 1) . PHP_EOL ), FILE_APPEND ); } }

Этот кусок кода можно вставить, например в dbconn.php

И в файле agents_executions_points.log будет примерно такое:

04-02-2016 12:30:01 start Array ( [ID] => 15620 [NAME] => CCatalogExport::PreGenerateExport(3); [AGENT_INTERVAL] => 3600 [IS_PERIOD] => N [MODULE_ID] => catalog ) 04-02-2016 12:30:04 finish Array ( [ID] => 15620 [NAME] => CCatalogExport::PreGenerateExport(3); [AGENT_INTERVAL] => 3600 [IS_PERIOD] => N [MODULE_ID] => catalog )

Похожие записи

1С-Битрикс. Защита от спама в регистрации без капчи

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

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

Итак, поехали!

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

www.olegpro.ru

1С-Битрикс. Логируем изменения сущности элемента торгового каталога

\Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnBeforeProductUpdate', ['\OlegproLogCatalogHandler', 'OnBeforeProductUpdate'] ); \Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnProductUpdate', ['\OlegproLogCatalogHandler', 'OnProductUpdate'] ); class OlegproLogCatalogHandler { private static $beforeProduct = null; public static function OnBeforeProductUpdate($ID, $arFields) { if ( is_array($arFields) && array_key_exists('QUANTITY', $arFields) && \Bitrix\Main\Loader::includeModule('catalog') && ($product = \CCatalogProduct::GetByID($ID)) && is_array($product) ) { self::$beforeProduct = $product; self::$beforeProduct['ID'] = $ID; } } public static function OnProductUpdate($ID, $arFields) { if ( is_array(self::$beforeProduct) && self::$beforeProduct['ID'] == $ID && is_array($arFields) && array_key_exists('QUANTITY', $arFields) && $arFields['QUANTITY'] != self::$beforeProduct['QUANTITY'] ) { global $USER; if ((is_object($USER) && $USER instanceof \CUser)) { $USER = new \CUser(); } $msg = [ '$ID' => $ID, '$arFields old' => self::$beforeProduct, '$arFields' => $arFields, '$_SERVER' => $_SERVER, '$_GET' => $_GET, '$_POST' => $_POST, 'debug_backtrace' => \Bitrix\Main\Diag\Helper::getBackTrace(), ]; $var = 'OnProductUpdate'; \Bitrix\Main\Diag\Debug::writeToFile( sprintf( "%s. User: %s [%d]\n%s", date('d-m-Y H:i:s'), $USER->GetLogin(), $USER->GetID(), (is_array($msg) ? print_r($msg, true) : $msg) ), $var, sprintf( '.logs/%s-catalog-handler.txt', \Bitrix\Main\Application::getInstance()->getContext()->getServer()->getHttpHost() ) ); } if (self::$beforeProduct !== null) { self::$beforeProduct = null; } } }

www.olegpro.ru

Битрикс файл bitrix/.settings.php - GoldWebIT. Техническая поддержка сайтов 1C Битрикс

Битрикс файл 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. Может быть не указан.  В этом случае будет использоваться \Bitrix\Main\Diag\FileExceptionHandlerLog.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?

goldwebit.net


Prostoy-Site | Все права защищены © 2018 | Карта сайта