1С-Битрикс

Полное руководство по настройке аудита действий в 1С-Битрикс

Полное руководство по настройке логирования действий в 1С-Битрикс: операций с файлами, инфоблоками, веб-формами и пользователями через обработчики событий в init.php

sqlka.ruОпубликовано: Чтение: 4 мин.
Полное руководство по настройке аудита действий в 1С-Битрикс

Для комплексного отслеживания изменений в системе 1С-Битрикс необходима комбинация встроенных инструментов и кастомных обработчиков. В этой статье рассмотрим практические шаги по настройке детального логирования действий пользователей через файл /bitrix/php_interface/init.php.

1. Настройка файла лога

Для начала работы с функцией AddMessage2Log() необходимо определить константу LOG_FILENAME, указав путь к файлу для записи логов.

// /bitrix/php_interface/dbconn.php или в init.php
define('LOG_FILENAME', $_SERVER['DOCUMENT_ROOT'] . '/logs/actions_' . date('Y-m-d') . '.log');

Все последующие вызовы AddMessage2Log() будут автоматически записываться в указанный файл, создавая структурированный журнал событий.

2. Кастомные обработчики событий в init.php

Добавьте в файл /bitrix/php_interface/init.php обработчики для основных типов действий в системе. В примерах ниже используется AddMessage2Log, но вы можете адаптировать код для записи в базу данных.

Логирование операций с файлами

// Событие OnBeforeChangeFile - перед изменением файла
AddEventHandler('main', 'OnBeforeChangeFile', function ($absPath, $content) {
    $message = sprintf(
        '[FILE] Пользователь %s изменяет файл: %s (размер: %d байт)',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $absPath,
        strlen($content)
    );
    AddMessage2Log($message, 'main');
});

Аудит элементов инфоблоков

// Перед обновлением элемента инфоблока
AddEventHandler('iblock', 'OnBeforeIBlockElementUpdate', function (&$arFields) {
    $message = sprintf(
        '[IBLOCK] Пользователь %s обновляет элемент ID %d (Инфоблок ID %d)',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $arFields['ID'],
        $arFields['IBLOCK_ID']
    );
    AddMessage2Log($message, 'iblock');
});

// После обновления элемента
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function (&$arFields) {
    $message = sprintf(
        '[IBLOCK] Пользователь %s обновил элемент ID %d',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $arFields['ID']
    );
    AddMessage2Log($message, 'iblock');
});

// Аналогично можно добавить обработчики для:
// OnBeforeIBlockElementAdd - перед добавлением
// OnBeforeIBlockElementDelete - перед удалением
// OnAfterIBlockElementAdd - после добавления
// OnAfterIBlockElementDelete - после удаления

Мониторинг изменений веб-форм

// Перед обновлением результата формы
AddEventHandler('form', 'onBeforeResultUpdate', function ($WEB_FORM_ID, $RESULT_ID) {
    $message = sprintf(
        '[FORM] Пользователь %s обновляет результат ID %d формы ID %d',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $RESULT_ID,
        $WEB_FORM_ID
    );
    AddMessage2Log($message, 'form');
});

// После обновления результата
AddEventHandler('form', 'onAfterResultUpdate', function ($WEB_FORM_ID, $RESULT_ID) {
    $message = sprintf(
        '[FORM] Пользователь %s обновил результат ID %d',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $RESULT_ID
    );
    AddMessage2Log($message, 'form');
});

// Также доступны события:
// onBeforeResultAdd - перед добавлением результата
// onBeforeResultDelete - перед удалением результата
// onAfterResultAdd - после добавления
// onAfterResultDelete - после удаления

Отслеживание действий пользователей

// После авторизации пользователя
AddEventHandler('main', 'OnAfterUserAuthorize', function ($arParams) {
    $message = sprintf(
        '[USER] Пользователь ID %s вошел в систему с IP %s',
        $arParams['user_fields']['ID'],
        $_SERVER['REMOTE_ADDR']
    );
    AddMessage2Log($message, 'main');
});

// Перед обновлением данных пользователя
AddEventHandler('main', 'OnBeforeUserUpdate', function (&$arFields) {
    $message = sprintf(
        '[USER] Пользователь %s обновляет профиль пользователя ID %s',
        $GLOBALS['USER']->GetID() ?: 'гость',
        $arFields['ID']
    );
    AddMessage2Log($message, 'main');
});

// Дополнительные полезные события:
// OnBeforeUserAdd - перед добавлением пользователя
// OnBeforeUserDelete - перед удалением пользователя
// OnUserLogin - во время попытки входа

3. Включение встроенного журнала событий (Event Log)

1С-Битрикс имеет стандартный журнал событий, который можно активировать для различных модулей:

  • Для инфоблоков: В настройках каждого инфоблока на вкладке «Журнал событий» включите опции записи добавления, изменения и удаления разделов и элементов.
  • Для веб-форм: В настройках формы активируйте логирование изменений результатов.
  • Общий журнал событий: Доступен по пути /bitrix/admin/event_log.php в административной панели.

4. Рекомендации по реализации

Оптимизация производительности

Активное логирование может создавать дополнительную нагрузку на систему. Рекомендуется:

  • Использовать фоновую запись логов или очередь сообщений
  • Писать логи в отдельную таблицу базы данных
  • Реализовать ротацию логов для удаления устаревших записей

Безопасность данных

  • Храните файлы логов вне корневой директории сайта (DOCUMENT_ROOT)
  • Настройте ограничение доступа к логам через .htaccess или аналогичные механизмы
  • Не записывайте в логи конфиденциальную информацию (пароли, персональные данные)

Расширение функциональности

Для более сложных сценариев аудита можно:

  • Добавлять в логи информацию об IP-адресе, User-Agent и полном стеке вызова
  • Сохранять старые и новые значения полей при изменениях
  • Реализовать уведомления о критических действиях по email или в мессенджеры

5. Практический план внедрения

  1. Определите константу LOG_FILENAME в файле dbconn.php
  2. Создайте каталог для хранения логов и настройте права доступа
  3. Добавьте в файл init.php обработчики для нужных вам событий
  4. Включите встроенный журнал событий для ключевых инфоблоков и форм
  5. Протестируйте логирование, выполнив различные действия в системе
  6. Настройте регулярную проверку и очистку логов

Такой подход обеспечит полное отслеживание действий пользователей как в административной части, так и на публичной части сайта, что особенно важно для контроля изменений и расследования инцидентов.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи