Превращаем лог 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. Вы получите чистый формат Файл - Действие - Время - Пользователь, который удовлетворит требования регулятора и упростит аудит.