Отдельный лог для своих сообщений
В некоторых случаях необходимо логировать пользовательские действия, но мешать их с системными сообщениями в логе MODX не хочется. Я покажу небольшой лайфхак как это сделать с помощью доступного API и компонента ControlErrorLog. Всё достаточно просто. В метод modX::log()
можно передать все необходимые параметры. В нашем случае мы можем передать новое имя файла для логирования. Также можно передать и путь, если файл должен располагаться в другом месте. Но тогда для ControlErrorLog он будет недоступен. Итак, как это сделать?
В третьем параметре этого метода нужно передать массив с определёнными опциями.
// Запись ошибки в файл test.log $modx->log(1, 'Сообщение об ошибке.', [ "target" => "FILE", // Запись в файл. Доступно ECHO и HTML. "options" => [ "filename" => "new_file.log", // Имя файла "filepath" => "абсолютный/путь/до/файла/", // Новое месторасположение файла лога. Можно не указывать. ] ]);
Данная запись появится в файле, если текущий уровень ошибок равен единице и больше. Этот уровень выставляется в системной настройке log_level
. Обычно она равна 1. А значит вы можете записать в файл только ошибки уровня Error
(1) и Fatal
(0). Но для логирования пользовательских действий может пригодится уровень Info
(3). Для этого случая уровень логирования нужно временно переопределить.
// Указываем уровень INFO и запоминаем старый уровень $old = $modx->setLogLevel(3); // Записываем сообщение $modx->log(3, 'Сообщение о действии', ["target" => "FILE", "options" => ["filename" => "test.log"]]); // Восстанавливаем старое значение $modx->setLogLevel($old);
Для удобной работы можно создать сниппет или функцию.
if (!function_exists('custom_log')) { function custom_log($message, $level = 1, $filename = 'error.log') { global $modx; $old = $modx->setLogLevel($level); $modx->log($level, $message, ["target" => "FILE", "options" => ["filename" => $filename]]); $modx->setLogLevel($old); } }
Эту функцию можно зарегистрировать в плагине на событие OnHandleRequest и дальше пользоваться ей где угодно. А в админке с помощью компонента ControlErrorLog можно выбрать и посмотреть указанный файл лога.
Вот такой лайфхак. Пользуйтесь на здоровье.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()