Журнал событий в Битрикс, добавление своего события
В системе управления Bitrix, для отладки и поиска ошибок, есть специализированный раздел Журнал событий, который находится по пути Настройки → Инструменты → Журнал событий:
В журнале событий, можно просмотреть события сайта, какие именно события записывать, можно определить самостоятельно. Это можно сделать в настройках главного модуля на вкладке Журнал событий:
В журнале событий доступна возможность настройки оповещений о наступлении событий на сайте.
Добавляем свое событие в журнал событий
Иногда бывает нужным в журнал событий добавить какое-то свое событие и настроить на него оповещение. Для примера давайте настроим свое собственное событие, когда будут возникать PHP ошибки.
Создадим файл с классом унаследованным от ExceptionHandlerLog
и подключим его в систему, тем методом который используется на сайте:
exceptionhandler.php<?php
namespace Hmarketing\Main\Helpers\Log;
use Bitrix\Main\Diag\ExceptionHandlerFormatter;
class ExceptionHandler extends \Bitrix\Main\Diag\ExceptionHandlerLog
{
// обязательный абстракный метод от абстрактного класса ExceptionHandlerLog
public function write($exception, $logType): void
{
// добавляем событие
$text = ExceptionHandlerFormatter::format($exception);
\CEventLog::Add(array(
'SEVERITY' => 'ERROR',
'AUDIT_TYPE_ID' => 'EXCEPTION_HANDLING_TYPE',
'MODULE_ID' => '',
'DESCRIPTION' => $text,
));
}
// обязательный абстракный метод от абстрактного класса ExceptionHandlerLog
public function initialize(array $options)
{
}
// метод который будем дергать при наступлении события OnEventLogGetAuditTypes, по сути это просто переопределяет название события в админке Битрикс
public static function OnEventLogGetAuditTypes (): array
{
return array(
'EXCEPTION_HANDLING_TYPE' => '[EXCEPTION_HANDLING_TYPE] Ошибка PHP'
);
}
}
Внесем правки в файл .settings.php
, в разделе exception_handling
нужно прописать наш класс в разделе log
:
bitrix/.settings.php'exception_handling' =>
array(
'value' =>
array(
'debug' => true,
'handled_errors_types' => 4437,
'exception_errors_types' => 4437,
'ignore_silence' => true,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' => array(
'class_name' => '\Hmarketing\Main\Helpers\Log\ExceptionHandler',
),
),
'readonly' => false,
)
Добавляем обработчик событий для изменения названия события в админке сайта:
local/php_interface/init.phpAddEventHandler('main', 'OnEventLogGetAuditTypes', 'phpError');
function phpError()
{
return Hmarketing\Main\Helpers\Log\ExceptionHandler::OnEventLogGetAuditTypes();
}
Как добавляется событие
Добавить событие из любого кода на сайте довольно просто:
<?
CEventLog::Add(array(
"SEVERITY" => "SECURITY",
"AUDIT_TYPE_ID" => "MY_OWN_TYPE",
"MODULE_ID" => "main",
"ITEM_ID" => 123,
"DESCRIPTION" => "Какое-то описание",
));
SEVERITY
принимать единственное значение,SECURITY
, для иного система переиначит наUNKNOWN
AUDIT_TYPE_ID
ваш собственныйID
типаMODULE_ID
модуль, с которого происходит запись в лог, скорее для информацииITEM_ID
ID объекта, в связи с которым происходит добавлениеDESCRIPTION
собственно описание записи лога, или техническая информация
Выполнение кода даст нам вот эту картинку:
Колонку Событие
, мы можем исправить. Берем и добавляем данный обработчик:
local/php_interface/init.phpAddEventHandler('main', 'OnEventLogGetAuditTypes', 'ASD_OnEventLogGetAuditTypes');
function ASD_OnEventLogGetAuditTypes()
{
return array('MY_OWN_TYPE' => '[MY_OWN_TYPE] Мой собственный тип');
}
Получаем такую картину: