Войти

Что вас интересует?

Запись логов всех запросов из Битрикс

Очень часто бывает необходимость посмотреть какие запросы уходили из Битрикс во внешние системы и проанализировать их. Для этого написал такой класс для записи данных логов в Хайдблок.
Для это необходимо создать 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);
где:
  1. SYSTEM - название сервиса в который отправляется запрос.
  2. URL - url запроса.
  3. METHOD - метод отправки запроса
  4. INFO - Информация об определенной информации.
  5. DATA - Дата отправки запроса
Комментрии
Комементариев нет, будьте первыми....
Оставить комментарий
Пожалуйста, введите ваше Имя.
Пожалуйста, введите ваш Email.
Пожалуйста, напишите комментарий.