Превращаем лог MODX в человеко-читаемый журнал для ЦБ

    При разработке на MODX часто возникает задача предоставить в Центральный банк (ЦБ) или другие контролирующие органы журнал действий пользователя. Стандартный лог системы содержит множество технических деталей, которые неудобны для анализа. В этой статье мы разберём, как настроить читаемый лог в формате Файл - Действие - Время - Пользователь.

    Почему стандартный лог MODX не подходит для ЦБ?

    По умолчанию MODX записывает события в таблицу modx_manager_log в сыром виде. Запись содержит ID действия, ID пользователя, временную метку и класс с методом. Для человека такой формат нечитаем: вместо понятного «Изменил ресурс» вы видите resource/update. ЦБ требует прозрачности - каждая операция должна быть легко идентифицируема.

    Как настроить читаемый журнал действий

    Для получения структурированного лога используйте плагин на событие OnManagerLogCreate. В плагине можно перехватить запись и дополнить её понятными данными. Рассмотрим пошаговую реализацию.

    Шаг 1. Создаём плагин

    Перейдите в меню «Система» → «Плагины» и создайте новый плагин с названием, например, HumanReadableLog. В поле «Код плагина» вставьте следующий PHP-скрипт:

    <?php
    $eventName = $modx->event->name;
    if ($eventName == 'OnManagerLogCreate') {
        $log = $modx->event->params['log'];
        $user = $modx->getObject('modUser', $log->get('user'));
        $username = $user ? $user->get('username') : 'Гость';
        $action = $log->get('action');
        $class = $log->get('class');
        $item = $log->get('item');
        $time = $log->get('occurred');
        // Преобразуем действие в читаемый вид
        $readableAction = '';
        switch ($class) {
            case 'modResource':
                $readableAction = ($action == 'update') ? 'Изменил ресурс' : 'Создал ресурс';
                break;
            case 'modTemplate':
                $readableAction = 'Изменил шаблон';
                break;
            default:
                $readableAction = $class . ' - ' . $action;
        }
        // Записываем в отдельную таблицу или файл
        $logEntry = $item . ' - ' . $readableAction . ' - ' . $time . ' - ' . $username;
        // Пример записи в файл
        file_put_contents(MODX_BASE_PATH . 'human_log.txt', $logEntry . PHP_EOL, FILE_APPEND);
    }

    Шаг 2. Привязываем событие

    В настройках плагина на вкладке «Системные события» отметьте галочку напротив OnManagerLogCreate. Сохраните плагин. Теперь каждое действие в админке будет записываться в файл human_log.txt в корне сайта.

    Шаг 3. Формат для ЦБ

    В файле human_log.txt строки будут выглядеть так: index.html - Изменил ресурс - 2025-03-15 10:30:00 - admin. Это полностью соответствует формату Файл - Действие - Время - Пользователь. При необходимости вы можете добавить IP-адрес или браузер, расширив код.

    Альтернативные способы логирования

    Если плагин не подходит, используйте готовые дополнения, например, LogsToDB или Console. Они позволяют экспортировать логи в CSV или Excel. Однако для ЦБ чаще всего требуется именно текстовый файл с простой структурой.

    Советы по безопасности

    Не храните файл human_log.txt в публичной папке - перенесите его в core/logs/ или защитите через .htaccess. Регулярно очищайте лог, чтобы он не переполнил диск. Для больших проектов используйте ротацию логов.

    Заключение

    Превратить ужасный лог MODX в человеко-читаемый журнал для ЦБ просто - достаточно написать небольшой плагин на событие OnManagerLogCreate. Вы получите чистый формат Файл - Действие - Время - Пользователь, который удовлетворит требования регулятора и упростит аудит.

    Часто задаваемые вопросы