Очень часто бывает необходимость посмотреть какие запросы уходили из Битрикс во внешние системы и проанализировать их. Для этого написал такой класс для записи данных логов в Хайдблок.
Для это необходимо создать c такими полями :
Для это необходимо создать c такими полями :
- UF_DATA_CREATE - Дата и время создания (тип поля дата со временем )
- UF_SYSTEM - Система куда отправляются запросы (тип поля Список)
- UF_URL - Url отправки (тип поля строка)
- UF_METHOD - Метод отправки (тип поля список)
- UF_DATA - отправленные данные в виде json (тип поля строка)
- UF_ANSWER - ответ сервера (тип поля строка)
- UF_ENITY_TYPE - тип сущности (тип поля число)
- UF_ENITY_ID - ID сущности (тип поле число)
<?php
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Loader;
class KitLogRequest
{
/**
* Добавить в лог
* @param array $arParams
* @return void
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\LoaderException
* @throws \Bitrix\Main\ObjectPropertyException
* @throws \Bitrix\Main\SystemException
*/
public static function addToLog(array $arParams = [])
{
Loader::includeModule("highloadblock");
$hlblock = HL\HighloadBlockTable::getById(KitHB::$kitLogRequest)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$arSystem = KIT::getArrUFByFieldName("UF_SYSTEM", "HLBLOCK_" . KitHB::$kitLogRequest);
$arSystemField = KIT::getValUFByUFId($arSystem["ID"], $arParams["SYSTEM"]);
if (is_array($arSystemField)) {
sort($arSystemField);
}
$systemId = $arSystemField[0]["ID"];
$arMethod = KIT::getArrUFByFieldName("UF_METHOD", "HLBLOCK_" . KitHB::$kitLogRequest);
$arMethodField = KIT::getValUFByUFId($arMethod["ID"], $arParams["METHOD"]);
if (is_array($arMethodField)) {
sort($arMethodField);
}
$methodId = $arMethodField[0]["ID"];
$data = array(
"UF_SYSTEM" => $systemId,
"UF_URL" => $arParams["URL"],
"UF_METHOD" => $methodId,
"UF_DATA" => json_encode($arParams["DATA"])
);
if (!empty($arParams["INFO"])) {
$data["UF_TOTAL_TIME"] = $arParams["INFO"]["total_time"];
$data["UF_HTTP_CODE"] = $arParams["INFO"]["http_code"];
}
if (intval($arParams["ENTITY_TYPE"]) > 0) {
$data["UF_ENTITY_TYPE"] = intval($arParams["ENTITY_TYPE"]);
}
if (intval($arParams["ENTITY_ID"]) > 0) {
$data["UF_ENTITY_ID"] = intval($arParams["ENTITY_ID"]);
}
$entity_data_class::add($data);
}
public static function getLogByParams($params)
{
Loader::includeModule("highloadblock");
$hlblock = HL\HighloadBlockTable::getById(KitHB::$kitLogRequest)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$arr = $entity_data_class::getList($params)->fetchAll();
return $arr;
}
public static function deleteLogElement($logId)
{
Loader::includeModule("highloadblock");
$hlblock = HL\HighloadBlockTable::getById(KitHB::$kitLogRequest)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
$arr = $entity_data_class::delete($logId);
return $arr;
}
public static function cleanLog()
{
$params = [
"filter" => [
"<=UF_DATE_CREATE" => ConvertTimeStamp(strtotime("-10 day"), "FULL")
],
"select" => [
"ID", "UF_DATE_CREATE"
],
"limit" => 50000
];
$arLog = self::getLogByParams($params);
foreach ($arLog as $item) {
self::deleteLogElement($item["ID"]);
}
}
}
для записи данных логов после вызова запроса вызовите данный метод KitLogRequest::addToLog($params); где $params массив с параметрами запроса.
$params = [
"SYSTEM" => "LK",
"URL" => $queryUrl,
"METHOD" => "post",
"INFO" => $info,
"DATA" => $queryData
];
KitLogRequest::addToLog($params);
где:- SYSTEM - название сервиса в который отправляется запрос.
- URL - url запроса.
- METHOD - метод отправки запроса
- INFO - Информация об определенной информации.
- DATA - Дата отправки запроса
Комментрии
Комементариев нет, будьте первыми....