Логирование выполнения агентов в 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; } } }Битрикс файл 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(
),
),
|
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