Modx revo логи ошибок

Знакомясь с любой системой управления сайтом, в первую я стараюсь понять, что делать, если что-то идет не так. И конечно в данном случае большую роль играют средства самой системы управления, которые либо помогают понять, в чем проблема, либо совершенно не информативны. Поговорим о MODX Revolution.

Система логирования MODX Revolution мне нравится, так как чем-то мне напоминает логирование в Linux и некоторых других open-source проектах. То есть позволяет выводить информацию в разные источники и позволяет группировать информацию по уровню важности, знакомыми всем системным администраторам log levels, что для меня очень важно. При этом система логирования задействуется уже на этапе установки, что упрощает решение проблем, происходящих в момент установки MODX, а они бывают.

Управление системой логирования производится через системные настройки log_target и log_level, которые расположены в блоке System and Server системных настроек MODX Revolution. На выводе в разные источники останавливаться не буду, скажу лишь, что источник задается системной настройкой log_target и по умолчанию логирование производится в файл (опция FILE). Сам файл с логами будет находиться по адресу: /core/cache/logs/error.log. Он же будет показываться, если выбрать пункт Error log (Журнал системы управления) в меню в админке.

На уровнях остановлюсь поподробнее, всего их 5: 0 (FATAL), 1 (ERROR), 2 (WARN), 3 (INFO), 4 (DEBUG). Использование данной группировки позволяет нам не только понимать уровень важности возникшей проблемы, но и задавать уровень, от которого информация будет в этот лог попадать (логироваться). Логика работы очень похожа на syslog. Например, если мы зададим уровень 1 (ERROR), то логироваться будут ошибки (1) и фатальные ошибки (0). Если же мы зададим 3 (INFO), то логироваться будут уровни 3 информация,2 предупреждения, 1 ошибки, 0 фатальные ошибки.

Кстати, как и любой лог в *nix системах за данным логом можно так же следить в режиме реального времени через tail:

tail -f /полный_путь_к_MODX/core/cache/logs/error.log

А еще мы можем сами добавлять информацию в лог через вызов метода MODX:

$modx->log(xPDO::LOG_LEVEL_ERROR,'Сообщение которое хотим отправить в лог');

, где LOG_LEVEL_ERROR означает уровень 1 (ERROR) и соответствует уровням логирования (FATAL, ERROR, WARN, INFO, DEBUG). Заменив последнее слово мы изменим и лог уровень, которому будет соответствовать важность сгенерированного нами сообщения.

« Буллеты через CSSРеферальный спам »

xPDO::log¶

Регистрирует сообщение с подробной информацией о том, где и когда произошло событие.

Синтаксис¶

API Docs: https://api.modx.com/revolution/2.2/db_core_xpdo_xpdo.class.html#xPDO::log()

$xpdo->log($level, $msg, $target= '', $def= '', $file= '', $line= '');
  • $level — (целое число) Уровень детализации зарегистрированного сообщения. Смотрите константы многословия ниже
  • $msg — (строка) Сообщение для входа.
  • $target — (mixed) Цель регистрации. Если это строка, это должно быть FILE,HTML или ECHO. Если массив, см. Примеры ниже.
  • $def — (строка) Имя определяющей структуры (например, класса), помогающей определить источник событий журнала.
  • $file — (строка) Имя файла, в котором произошло событие журнала. Обычно вы используете константу __FILE__.
  • $line — (строка) Номер строки, помогающей определить источник события. Обычно вы используете константу __FILE__
void log (integer $level, string $msg, [string $target = ''], [string $def = ''], [string $file = ''], [string $line = ''])

Уровни журнала¶

Во многих случаях вы можете использовать эквивалентные константы MODX для уровней журнала.

То, что печатается, контролируется настройкой системы log_level. Вы можете переопределить это во время выполнения, используя метод setLogLevel.

Примеры¶

Просто¶

Простое сообщение журнала, записывает в файл журнала по умолчанию (например, core/cache/logs/error.log):

$xpdo->log(xPDO::LOG_LEVEL_ERROR, '[Mobile Detect] An error occurred.');

В журналах это будет выглядеть так:

[2013-09-15 14:21:25] (ERROR @ /index.php) [Mobile Detect] An error occurred.

Укажите Сниппет¶

Поскольку приложение MODX в конечном итоге запускается через файл index.php, полезно добавить дополнительную информацию:

$xpdo->log(xPDO::LOG_LEVEL_ERROR, 'An error occurred.', '', 'MySnippet');
[2013-09-15 14:22:48] (ERROR in MySnippet @ /index.php) An error occurred

Указать файл и строку¶

Помните, что в конечном итоге все сниппеты и плагины MODX запускаются из кэшированных файлов, поэтому в качестве исходного файла будет указан кэшированный файл.

$xpdo->log(xPDO::LOG_LEVEL_ERROR, 'This is my error message...', '', 'MySnippet', __FILE__, __LINE__);
[2013-09-15 14:48:02] (ERROR in MySnippet @ /path/to/core/cache/includes/elements/modsnippet/28.include.cache.php : 7) This is my error message...

Пользовательский файл журнала¶

Вы можете отправить ошибки в пункт назначения, отличный от журнала ошибок MODX по умолчанию. Для этого вы должны передать массив в аргумент $target. Вы должны подробно указать FILE в качестве цели, в противном случае сообщение будет возвращено на страницу.

$xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Error for my custom log file', array(
    'target' => 'FILE',
    'options' => array(
        'filename' => 'custom.log'
    )
));

По умолчанию путь к файлам журнала — это core/cache/logs/, поэтому в этом примере мы находим наше сообщение журнала внутри файла custom.log:

[2013-09-15 15:01:07] (ERROR @ /index.php) Error for my custom log file

При желании вы также можете указать путь через аргумент filepath.

Поскольку это немного многословно, вы можете найти более понятным определение цели регистрации, а затем ссылаться на массив:

$log_target = array(
    'target'=>'FILE',
    'options' => array(
        'filename'=>'my_custom.log'
    )
);
$xpdo->log(xPDO::LOG_LEVEL_ERROR, 'My Error...',$log_target);
$xpdo->log(xPDO::LOG_LEVEL_ERROR, 'Some other error...',$log_target);

Отладка¶

Вы можете изменить уровень зарегистрированного сообщения, регулируя первый параметр. Например. для записи отладочного сообщения:

$xpdo->log(xPDO::LOG_LEVEL_DEBUG,'This is a debugging statement.');

Пользовательское использование в сниппетах¶

Это может быть очень удобно для увеличения подробности регистрации для отдельного сниппета или плагина. Для этого используйте функцию setLogLevel(). Вы можете использовать это, чтобы переопределить глобальное значение системного параметра log_level:

// Вызови свой сниппет так: [[mySnippet? &log_level=`4`]]
// Переопределить глобальное значение log_level
$log_level = $modx->getOption('log_level', $scriptProperties, $modx->getOption('log_level'));
$modx->setLogLevel($log_level);

Константы многословия¶

xPDO константа MODX константа Значение
xPDO::LOG_LEVEL_FATAL MODX_LOG_LEVEL_FATAL 0
xPDO::LOG_LEVEL_ERROR MODX_LOG_LEVEL_ERROR 1
xPDO::LOG_LEVEL_WARN MODX_LOG_LEVEL_WARN 2
xPDO::LOG_LEVEL_INFO MODX_LOG_LEVEL_INFO 3
xPDO::LOG_LEVEL_DEBUG MODX_LOG_LEVEL_DEBUG 4

Смотрите также¶

  • Системная настройка log_level
  • Системная настройка log_target
  • xPDO

One of the common tools available for troubleshooting issues for a website is the error log.  It is important to understand that Modx shows an error log for problems or flags that are set by developers of Modx.  Additionally, you can see an error log generated by PHP when there are problems with PHP code within the Modx CMS.  This log is not the same as the one generated by Modx.  The following article describes both types of error logs and demonstrates how you can view both types of logs within the Modx Administrator Dashboard interface.

Accessing the Error Logs within Modx

Understanding the Different Error Logs

Modx-generated Error log PHP Error log
File locaton The actual log file is a text file named error.log and can be found in the /core/cache/logs/ directory of your Modx installation. This is a generic error log created due to PHP errors such as syntax errors.  The error_log file can be found in multiple directories as it will be written in each directory where the error occurs.
Viewable This log is viewable through the Modx Reports>Error Log  menu option. This log is viewable through the Modx Resource Tree as a text file.
Generated when Errors in this log can be used to intentionally flag an event in Modx code for troubleshooting or development purposes. This is an automatically generated error log whose sole purpose is to log PHP errors.

Viewing the Modx Error Log

  1. Login to the Modx Administrator Dashboard.
  2. Hover over the menu bar where it says REPORTS.  When the drop-down menu appears, click on ERROR LOG.
  3. When the ERROR LOG screen appears, it will show the most recent errors, if there are any to report.  The screen will appear as follows:

    Error log - no errors showing

    The screenshot above shows no present errors.  If Modx errors do occur, it will display the errors written into the ERROR.LOG file.  For example, a Modx error may be shown when you improperly set a Modx tag.  If you click on the CLEAR button, the ERROR.LOG will be reset to a blank text file.

Viewing a PHP error log in the Modx Resource Tree

  1. Login to the Modx Administrator Dashboard.
  2. Click on the FILES tab of the Resource Tree on the left side of the screen.
  3. In order to view the ERROR_LOG file you will need to select the file by clicking on it in the files of the resource tree at left.  If a PHP error has occurred, then an ERROR_LOG file willl be written and saved in the corresponding directory where the PHP script generating the error is located.  This file can sometimes be seen in multiple locations as it is written into the location where the corresponding error occurs.  The example below shows the ERROR_LOG file in the tree-view of the files and folders at left.  In order to DELETE this log, you would need to right-click on the file in the resource tree and then select DELETE FILE from the drop-down menu that appears.
    Saved Error log
  4. Click on CLOSE in the top right-hand corner in order to close the log file.

The use of the Modx ERROR.LOG and the ERROR_LOG (generated by PHP) can be invaluable when trying to determine a problem within the Modx application.  If you have any problems with any portion of Modx, you can create a snippet to write a dummy error in the ERROR.LOG file to help determine the location of a problem in your code.  Or, you can use the recorded errors in the PHP ERROR_LOG to troubleshoot the issue and provide valuable information for your developers.


май
19
, 2015

Рассмотрим примеры использования логов для отладки веб-приложения.

Используем логи Modx

По умолчанию логи Modx находятся в файле /core/cache/logs/error.log.
Это обычный текстовый документ, можете открывать его в любом редакторе.
Также он доступен в админке Modx, пункт Управление — Отчеты — Журнал ошибок
(в разных версиях меню может отличаться).
Но самый удобный способ при работе в командной строке Linux, это набрать

    tail -f /path_to_modx_site/core/cache/logs/error.log

Команда будет выводить последние несколько строк из файла в режиме «онлайн»

Часто логи нужны нам не только для того, чтобы посмотреть ошибки, генерируемые Modx.
Иногда мы хотим записать туда свои данные в целях отладки.
Старый добрый вывод в браузер тоже работает, но не всегда это удобно, например,
при отладке скриптов, вызываемых аяксом. В Modx Revo записать в логи данные можно так:

    $modx->log(1, 'message: '.$phone);

Вторым параметром передается сама строка для вывода. Вначале добавляется пояснения для удобства,
чтобы не запутаться, когда в логи выводим много данных.

Если мы работаем не с Modx или не хотим использовать его логи, то можем работать с логами веб-сервера.
Где они находятся, нужно смотреть в настройках веб-сервера.
Это тот же самый текстовый файл, который можем открывать, как угодно.
А записывать в него можем командой

    error_log('ARRAY: '.var_export($array, true));

Обратите внимание, что можно использовать команду var_export со вторым параметром true.
Функция var_export выведет содержимое любого типа, например, массивов.
Капсом пояснение пишем, чтобы было легче ориентироваться в логах.
Можно даже записать отдельную функцию для записи в логи, например:

    // Функция записи в логи
    function errorLog($caption, $param) {
        error_log(strtoupper($caption).': '.var_export($param, true));
    }
    // Вызов функции
    errorLog('список телефонов', $phones);

Как видим, запись стала читаться получше

Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.

Истории из жизни айти и обсуждение кода.


Для получения отладочных сообщений в журнале отчетов MODX следует использовать $modx->log(). Объявление функции имеет вид:

public function log($level, $msg, $target = '', $def = '', $file = '', $line = '')

Первый параметр

Первый параметр указывает уровень/тип сообщения — ошибка, предупреждение, информационное сообщение или отладочная информация. Для каждого уровня константы:

  • MODX_LOG_LEVEL_FATAL = 0
  • MODX_LOG_LEVEL_ERROR = 1
  • MODX_LOG_LEVEL_WARN = 2
  • MODX_LOG_LEVEL_INFO = 3
  • MODX_LOG_LEVEL_DEBUG = 4

Второй параметр

Второй параметр содержит информацию, которая будет записана в журнал ошибок.

Обычно ограничиваются указанием только первых двух параметров

Третий параметр

В него передается «назначение», куда будет выводится информация. Возможные значения:

  • FILE — сообщение сохраняется в файл core/cache/logs/error.log (по умочанию)
  • ECHO — информация выводится на экран
  • HTML — информация выводится на экран обёрнутая в тег <pre>

Четвертый параметр

В нём можно передать название скрипта или метода класса, в котором вызван метод log(). Особенно это удобно, когда таких вызовов несколько.

  • «MySnippet» — выведется именно эта строка
  • __METHOD__ — выведется название метода, где производится логирование

Пятый и шестой параметры

Они отвечают за вывод информации о скрипте и номере строки. Если их не указать, то они определятся автоматически как:

  • __FILE__
  • __LINE__

Системные настройки

Есть две системные настройки, влияющие на работу метода log() — это log_target и log_level. По умолчанию они имеют значение FILE и 1, соответственно.

Первая (log_target) указывает куда выводить информацию (см. «третий параметр»).

Вторая (log_level) указывает текущий уровень логирования MODX. Возможные значения:

  • 0 — для фатальных сообщений (fatal)
  • 1 — для ошибок (error)
  • 2 — для предупреждений (warn)
  • 3 — для информационных сообщений (info)
  • 4 — для отладочных сообщений (debug)

Эта настройка ограничивает логирование сообщений указанным уровнем. Таким образом log() с уровнем выше, чем в настройке, будет отклонён. Например, если в настройке указано log_level = 1 (т.е. логируются только ошибки), то все вызовы метода log() с уровнем WARN, INFO и DEBUG в журнал записаны не будут. Как правило, при отладке на эти уровни не обращают внимание и используют текущий уровень логирования для ошибок.

Примеры

$modx->log(MODX_LOG_LEVEL_ERROR, 'Сообщение');
// или так
$modx->log(modX::LOG_LEVEL_ERROR, 'Сообщение');
// или ещё короче
$modx->log(1, 'Сообщение');

В режиме разработки полезно работать с уровнем DEBUG. Это полезно тем, что даже если вы забудете потом удалить этот вызов, то он не будет забивать журнал ошибок, так как на продакшн сайте уровень логирования всегда выставляется в 1 (записывать в журнал только ошибки).

Если нужно вывести только отладочную информацию на странице без контента, то указываем вывод в HTML и добавляем die() или exit(), например:

$modx->log(MODX_LOG_LEVEL_ERROR, print_r($modx->config, 1),'HTML'); die();

Copyright © Majestio, 2006-2023

  • Modx manager ошибка 500
  • Mobile legends неизвестная ошибка
  • Mobile friendly другая ошибка
  • Mobi c ошибка протокола обмена доступ ограничен
  • Mngcore dll 1с ошибка