Using JLog/ru: Difference between revisions
From Joomla! Documentation
No edit summary |
Updating to match new version of source page |
||
| Line 3: | Line 3: | ||
__TOC__ | __TOC__ | ||
== Обзор == | == Обзор == | ||
Логирование в Joomla дает вам возможность логировать сообщения в файлы и на экран (в консоли отладки Joomla внизу веб-страницы), а основным классом Joomla, который для этого используется, является JLog. | <span class="mw-translate-fuzzy">Логирование в Joomla дает вам возможность логировать сообщения в файлы и на экран (в консоли отладки Joomla внизу веб-страницы), а основным классом Joomla, который для этого используется, является JLog.</span> | ||
<div class="mw-translate-fuzzy"> | |||
Логирование, в некоторой степени, может контролироваться динамически через общие настройки Joomla и путем настройки плагина «Система - Отладка» (поставляется с Joomla). В целом эти возможности позволяют вам: | Логирование, в некоторой степени, может контролироваться динамически через общие настройки Joomla и путем настройки плагина «Система - Отладка» (поставляется с Joomla). В целом эти возможности позволяют вам: | ||
* включать или отключать систему отладки - чтобы вы не потребляли ресурсы без необходимости, но при этом у вас оставалась информация для того, чтобы помочь в устранении неполадок, когда есть проблемы. Например, на живом сайте, на котором установлено ваше расширение. | * включать или отключать систему отладки - чтобы вы не потребляли ресурсы без необходимости, но при этом у вас оставалась информация для того, чтобы помочь в устранении неполадок, когда есть проблемы. Например, на живом сайте, на котором установлено ваше расширение. | ||
| Line 10: | Line 11: | ||
* просматривать сообщения логов в консоли отладки - вы можете выбрать группу пользователей, для которых должны отображаться сообщения логов, чтобы на живом сайте разработчики могли видеть сообщения, в то время как другие пользователи не затрагивались. | * просматривать сообщения логов в консоли отладки - вы можете выбрать группу пользователей, для которых должны отображаться сообщения логов, чтобы на живом сайте разработчики могли видеть сообщения, в то время как другие пользователи не затрагивались. | ||
* фильтровать сообщения консоли отладки по приоритету (например, INFO, DEBUG, WARNING и т. д.) и по категориям (вы можете сами определять свои категории). | * фильтровать сообщения консоли отладки по приоритету (например, INFO, DEBUG, WARNING и т. д.) и по категориям (вы можете сами определять свои категории). | ||
Кроме того, сообщения логов могут быть переведены на разные языки. | Кроме того, сообщения логов могут быть переведены на разные языки. | ||
</div> | |||
Основные параметры конфигурации, относящиеся к ведению логов, показаны ниже. | Основные параметры конфигурации, относящиеся к ведению логов, показаны ниже. | ||
Включение отладки и отображение консоли отладки Joomla контролируется через общие настройки. | Включение отладки и отображение консоли отладки Joomla контролируется через общие настройки. | ||
[[File:Global conf debug-en.jpg]] | [[File:Global conf debug-en.jpg]] | ||
Логирование в общий файл логов контролируется с помощью вкладки Журнал (логи) конфигурации плагина Joomla «Система - Отладка» (в меню администратора нажмите «Расширения / Плагины», найдите плагин «Система - Отладка» и нажмите на него, чтобы изменить его параметры). | <div class="mw-translate-fuzzy"> | ||
Логирование в общий файл логов контролируется с помощью вкладки Журнал (логи) конфигурации плагина Joomla «Система - Отладка» (в меню администратора нажмите «Расширения / Плагины», найдите плагин «Система - Отладка» и нажмите на него, чтобы изменить его параметры). | |||
</div> | |||
[[File:Debug logging settings-en.jpg]] | [[File:Debug logging settings-en.jpg]] | ||
Параметры на вкладке "Плагин" контролируют отображение в консоли отладки Joomla. | Параметры на вкладке "Плагин" контролируют отображение в консоли отладки Joomla. | ||
[[File:Debug plugin settings-en.jpg]] | [[File:Debug plugin settings-en.jpg]] | ||
== Базовое логирование в файл == | == Базовое логирование в файл == | ||
| Line 30: | Line 36: | ||
JLog::add('my error message', JLog::ERROR, 'my-error-category'); | JLog::add('my error message', JLog::ERROR, 'my-error-category'); | ||
<div class="mw-translate-fuzzy"> | |||
Параметры | Параметры | ||
# Строка сообщения. Вы можете использовать перевод, например, <tt>JText::_('MY_EXTENSION_ERR_MSG')</tt>. Вы также можете отображать значения переменных при условии, что вы конвертируете их в строковый формат (например, с помощью <tt>__toString ()</tt>, если тип переменной это поддерживает). | # Строка сообщения. Вы можете использовать перевод, например, <tt>JText::_('MY_EXTENSION_ERR_MSG')</tt>. Вы также можете отображать значения переменных при условии, что вы конвертируете их в строковый формат (например, с помощью <tt>__toString ()</tt>, если тип переменной это поддерживает). | ||
# Приоритет, который может быть одним из: JLog::EMERGENCY, JLog::ALERT, JLog::CRITICAL, JLog::ERROR, JLog::WARNING, JLog::NOTICE, JLog::INFO, JLog::DEBUG (основано на уровнях серьёзности syslog / RFC 5424 – подробнее в [https://ru.wikipedia.org/wiki/Syslog материале Wikipedia о syslog]). | # Приоритет, который может быть одним из: JLog::EMERGENCY, JLog::ALERT, JLog::CRITICAL, JLog::ERROR, JLog::WARNING, JLog::NOTICE, JLog::INFO, JLog::DEBUG (основано на уровнях серьёзности syslog / RFC 5424 – подробнее в [https://ru.wikipedia.org/wiki/Syslog материале Wikipedia о syslog]). | ||
# Категория, которая является просто текстовой строкой. Вы можете определить любые категории, которые вам нравятся. Лучше всего определять их, чтобы избежать возможных конфликтов с другими расширениями. | # Категория, которая является просто текстовой строкой. Вы можете определить любые категории, которые вам нравятся. Лучше всего определять их, чтобы избежать возможных конфликтов с другими расширениями. | ||
</div> | |||
Если вы включите диагностические сообщения отладки в ваше расширение, то это может быть очень полезно при устранении неполадок. В этом случае добавьте к своему лог сообщению проверку на JDEBUG: | <span class="mw-translate-fuzzy">Если вы включите диагностические сообщения отладки в ваше расширение, то это может быть очень полезно при устранении неполадок. В этом случае добавьте к своему лог сообщению проверку на JDEBUG:</span> | ||
if (JDEBUG) | if (JDEBUG) | ||
{ | { | ||
JLog::add('my debug message', JLog::DEBUG, 'my-debug-category'); | JLog::add('my debug message', JLog::DEBUG, 'my-debug-category'); | ||
} | } | ||
== Логирование в определённый файл логов == | <div class="mw-translate-fuzzy"> | ||
== Логирование в определённый файл логов == | |||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Вы можете использовать <tt>JLog::addLogger()</tt>, чтобы настроить ведение логов в дополнительный файл логов, отфильтровывая сообщения логов по приоритету (уровень серьезности) и / или категории. Параметры <tt>JLog::addLogger()</tt>: | Вы можете использовать <tt>JLog::addLogger()</tt>, чтобы настроить ведение логов в дополнительный файл логов, отфильтровывая сообщения логов по приоритету (уровень серьезности) и / или категории. Параметры <tt>JLog::addLogger()</tt>: | ||
| Line 49: | Line 60: | ||
# массив категорий, которые будут логироваться в этом файле (или если для параметра 4 установлено значение <tt>true</tt>, тогда этот массив определяет категории, которые НЕ должны регистрироваться в файле) | # массив категорий, которые будут логироваться в этом файле (или если для параметра 4 установлено значение <tt>true</tt>, тогда этот массив определяет категории, которые НЕ должны регистрироваться в файле) | ||
# (часто пропускается) логическое значение, указывающее, является ли параметр 3 списком включения (по умолчанию P4 = <tt>false</tt>) или списком исключения (P4 = <tt>true</tt>) | # (часто пропускается) логическое значение, указывающее, является ли параметр 3 списком включения (по умолчанию P4 = <tt>false</tt>) или списком исключения (P4 = <tt>true</tt>) | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Например, если вы разработали расширение 'com_helloworld', вы можете использовать следующее: | Например, если вы разработали расширение 'com_helloworld', вы можете использовать следующее: | ||
</div> | |||
JLog::addLogger( | JLog::addLogger( | ||
| Line 57: | Line 71: | ||
'text_file' => 'com_helloworld.log.php' | 'text_file' => 'com_helloworld.log.php' | ||
), | ), | ||
// Sets messages of all log levels to be sent to the file | // Sets messages of all log levels to be sent to the file. | ||
JLog::ALL, | JLog::ALL, | ||
// The log category/categories which should be recorded in this file | // The log category/categories which should be recorded in this file. | ||
// In this case, it's just the one category from our extension | // In this case, it's just the one category from our extension. | ||
// | // We still need to put it inside an array. | ||
array('com_helloworld') | array('com_helloworld') | ||
); | ); | ||
<div class="mw-translate-fuzzy"> | |||
Затем, когда вы логируете сообщение, укажите категорию 'com_helloworld', как в примере ниже | Затем, когда вы логируете сообщение, укажите категорию 'com_helloworld', как в примере ниже | ||
</div> | |||
JLog::add(JText::_('COM_HELLOWORLD_ERROR_MESSAGE_123'), JLog::ERROR, 'com_helloworld'); | JLog::add(JText::_('COM_HELLOWORLD_ERROR_MESSAGE_123'), JLog::ERROR, 'com_helloworld'); | ||
Это приведет к тому, что ваше сообщение будет записано в com_helloworld.log.php. Если в настройках плагина «Система - Отладка» для параметра «Протоколировать все» задано значение «Да», то это сообщение появится и в общем файле журнала everything.php. | <span class="mw-translate-fuzzy">Это приведет к тому, что ваше сообщение будет записано в com_helloworld.log.php. Если в настройках плагина «Система - Отладка» для параметра «Протоколировать все» задано значение «Да», то это сообщение появится и в общем файле журнала everything.php.</span> | ||
'''Примечание:''' Вы можете объединить это с [[S:MyLanguage/Display error messages and notices|Display error messages and notices]] для отображения видимых уведомлений об ошибках для пользователей. | '''Примечание:''' Вы можете объединить это с [[S:MyLanguage/Display error messages and notices|Display error messages and notices]] для отображения видимых уведомлений об ошибках для пользователей. | ||
| Line 77: | Line 93: | ||
JLog::addLogger( | JLog::addLogger( | ||
array( | array( | ||
// Sets file name | // Sets file name. | ||
'text_file' => 'com_helloworld.critical_emergency.php' | 'text_file' => 'com_helloworld.critical_emergency.php' | ||
), | ), | ||
// Sets critical and emergency log level messages to be sent to the file | // Sets critical and emergency log level messages to be sent to the file. | ||
JLog::CRITICAL + JLog::EMERGENCY, | JLog::CRITICAL + JLog::EMERGENCY, | ||
// The log category which should be recorded in this file | // The log category which should be recorded in this file. | ||
array('com_helloworld') | array('com_helloworld') | ||
); | ); | ||
| Line 90: | Line 106: | ||
JLog::addLogger( | JLog::addLogger( | ||
array( | array( | ||
// Sets file name | // Sets file name. | ||
'text_file' => 'com_helloworld.all_but_debug.php' | 'text_file' => 'com_helloworld.all_but_debug.php' | ||
), | ), | ||
// Sets all but DEBUG log level messages to be sent to the file | // Sets all but DEBUG log level messages to be sent to the file. | ||
JLog::ALL & ~JLog::DEBUG, | JLog::ALL & ~JLog::DEBUG, | ||
// The log category which should be recorded in this file | // The log category which should be recorded in this file. | ||
array('com_helloworld') | array('com_helloworld') | ||
); | ); | ||
Уровни приоритета <tt>JLog</tt> реализованы в виде отдельных битов целого числа, поэтому вы можете использовать '''побитовые''' операции (побитовое AND, &; и побитовое NOT, ~) для вычисления подходящих уровней логов. <tt>JLog::All</tt> является постоянным целым числом, в котором установлены все соответствующие биты, поэтому включены все уровни приоритета Joomla. | <div class="mw-translate-fuzzy"> | ||
Уровни приоритета <tt>JLog</tt> реализованы в виде отдельных битов целого числа, поэтому вы можете использовать '''побитовые''' операции (побитовое AND, &; и побитовое NOT, ~) для вычисления подходящих уровней логов. <tt>JLog::All</tt> является постоянным целым числом, в котором установлены все соответствующие биты, поэтому включены все уровни приоритета Joomla. | |||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
== Форматирование файла логов == | == Форматирование файла логов == | ||
</div> | |||
Первый параметр <tt>addLogger</tt> может иметь несколько необязательных дополнительных настроек в дополнение к параметру <tt>text_file</tt>. | Первый параметр <tt>addLogger</tt> может иметь несколько необязательных дополнительных настроек в дополнение к параметру <tt>text_file</tt>. | ||
<div class="mw-translate-fuzzy"> | |||
Например, есть параметр <tt>text_entry_format</tt>, указывающий формат каждой строки в вашем лог файле. | Например, есть параметр <tt>text_entry_format</tt>, указывающий формат каждой строки в вашем лог файле. | ||
</div> | |||
Формат по умолчанию: | Формат по умолчанию: | ||
| Line 115: | Line 137: | ||
JLog::addLogger( | JLog::addLogger( | ||
array( | array( | ||
// Sets file name | // Sets file name. | ||
'text_file' => 'com_helloworld.critical_emergency.php', | 'text_file' => 'com_helloworld.critical_emergency.php', | ||
// Sets the format of each line | // Sets the format of each line. | ||
'text_entry_format' => '{DATETIME} {PRIORITY} {MESSAGE}' | 'text_entry_format' => '{DATETIME} {PRIORITY} {MESSAGE}' | ||
), | ), | ||
// Sets all but DEBUG log level messages to be sent to the file | // Sets all but DEBUG log level messages to be sent to the file. | ||
JLog::ALL & ~JLog::DEBUG, | JLog::ALL & ~JLog::DEBUG, | ||
// The log category which should be recorded in this file | // The log category which should be recorded in this file. | ||
array('com_helloworld') | array('com_helloworld') | ||
); | ); | ||
| Line 131: | Line 153: | ||
{TIME} | {TIME} | ||
{DATE} | {DATE} | ||
Существует дополнительный необязательный логический параметр <tt>text_file_no_php</tt>, который указывает, следует ли добавлять в файл логов обычный префикс: | Существует дополнительный необязательный логический параметр <tt>text_file_no_php</tt>, который указывает, следует ли добавлять в файл логов обычный префикс: | ||
| Line 138: | Line 159: | ||
#<?php die('Forbidden.');?> | #<?php die('Forbidden.');?> | ||
<div class="mw-translate-fuzzy"> | |||
'''Примечание:''' Обычно вам не следует устанавливать для этого параметра значение <tt>false</tt>. Файлы логов не должны быть доступны для чтения извне, поскольку они могут предоставить злоумышленникам ценную информацию о вашей системе. | '''Примечание:''' Обычно вам не следует устанавливать для этого параметра значение <tt>false</tt>. Файлы логов не должны быть доступны для чтения извне, поскольку они могут предоставить злоумышленникам ценную информацию о вашей системе. | ||
Изменяйте этот параметр, только если вы знаете, что делаете! | Изменяйте этот параметр, только если вы знаете, что делаете! | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Кроме того, если вы хотите сохранить файл логов где-то еще, а не по пути, указанному в общих настройках Joomla, вы можете изменить параметр <tt>text_file_path</tt>. | Кроме того, если вы хотите сохранить файл логов где-то еще, а не по пути, указанному в общих настройках Joomla, вы можете изменить параметр <tt>text_file_path</tt>. | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
== Логирование в другие места == | == Логирование в другие места == | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Помимо логирования в файлы, вы также можете логировать в другие места, такие как | Помимо логирования в файлы, вы также можете логировать в другие места, такие как | ||
* область сообщений Joomla (сообщение отображается, если вы вызываете <tt>JFactory::getApplication()->enqueueMessage()</tt>) | * область сообщений Joomla (сообщение отображается, если вы вызываете <tt>JFactory::getApplication()->enqueueMessage()</tt>) | ||
| Line 154: | Line 182: | ||
JLog::add('сообщение об ошибке для отображения', JLog::ERROR, 'msg-error-cat'); | JLog::add('сообщение об ошибке для отображения', JLog::ERROR, 'msg-error-cat'); | ||
вы получаете сообщение, скопированное на панель сообщений. | вы получаете сообщение, скопированное на панель сообщений. | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
'''Обратите внимание, что код ядра Joomla настраивает запись в очередь сообщений для категории 'jerror', поэтому, если вы используете эту категорию в своих сообщениях журнала, вы получите сообщение, отображаемое на панели сообщений.''' | '''Обратите внимание, что код ядра Joomla настраивает запись в очередь сообщений для категории 'jerror', поэтому, если вы используете эту категорию в своих сообщениях журнала, вы получите сообщение, отображаемое на панели сообщений.''' | ||
| Line 160: | Line 190: | ||
JLog::add ('ошибка скопирована на панель сообщений', JLog::ERROR, 'jerror'); | JLog::add ('ошибка скопирована на панель сообщений', JLog::ERROR, 'jerror'); | ||
приведет к тому, что сообщение будет отображаться в области сообщений Joomla, даже если вы явно не настроили такое поведение для своего логгера. | приведет к тому, что сообщение будет отображаться в области сообщений Joomla, даже если вы явно не настроили такое поведение для своего логгера. | ||
</div> | |||
== Исключения == | == Исключения == | ||
| Line 167: | Line 198: | ||
JLog::addLogger( | JLog::addLogger( | ||
array( | array( | ||
// Use mycustomlogger | // Use mycustomlogger. | ||
'logger' => 'mycustomlogger', | 'logger' => 'mycustomlogger', | ||
'text_file' => 'com_helloworld.errors.php' | 'text_file' => 'com_helloworld.errors.php' | ||
| Line 175: | Line 206: | ||
); | ); | ||
== Что ещё почитать == | == Что ещё почитать == | ||
Логирование в Joomla должно использоваться в тандеме с исключениями PHP, а не в качестве замены. Подробнее в [[S:MyLanguage/Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1|Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]]. | Логирование в Joomla должно использоваться в тандеме с исключениями PHP, а не в качестве замены. Подробнее в [[S:MyLanguage/Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1|Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]]. | ||
<noinclude> | <noinclude> | ||
Revision as of 13:38, 30 June 2019
Обзор
Логирование в Joomla дает вам возможность логировать сообщения в файлы и на экран (в консоли отладки Joomla внизу веб-страницы), а основным классом Joomla, который для этого используется, является JLog.
Логирование, в некоторой степени, может контролироваться динамически через общие настройки Joomla и путем настройки плагина «Система - Отладка» (поставляется с Joomla). В целом эти возможности позволяют вам:
- включать или отключать систему отладки - чтобы вы не потребляли ресурсы без необходимости, но при этом у вас оставалась информация для того, чтобы помочь в устранении неполадок, когда есть проблемы. Например, на живом сайте, на котором установлено ваше расширение.
- направлять сообщения логов в определенный файл логов вашего собственного расширения
- просматривать сообщения логов в консоли отладки - вы можете выбрать группу пользователей, для которых должны отображаться сообщения логов, чтобы на живом сайте разработчики могли видеть сообщения, в то время как другие пользователи не затрагивались.
- фильтровать сообщения консоли отладки по приоритету (например, INFO, DEBUG, WARNING и т. д.) и по категориям (вы можете сами определять свои категории).
Кроме того, сообщения логов могут быть переведены на разные языки.
Основные параметры конфигурации, относящиеся к ведению логов, показаны ниже.
Включение отладки и отображение консоли отладки Joomla контролируется через общие настройки.
Логирование в общий файл логов контролируется с помощью вкладки Журнал (логи) конфигурации плагина Joomla «Система - Отладка» (в меню администратора нажмите «Расширения / Плагины», найдите плагин «Система - Отладка» и нажмите на него, чтобы изменить его параметры).
Параметры на вкладке "Плагин" контролируют отображение в консоли отладки Joomla.
Базовое логирование в файл
Чтобы отправить сообщение в лог, используйте функцию JLog::add(). Например:
JLog::add('my error message', JLog::ERROR, 'my-error-category');
Параметры
- Строка сообщения. Вы можете использовать перевод, например, JText::_('MY_EXTENSION_ERR_MSG'). Вы также можете отображать значения переменных при условии, что вы конвертируете их в строковый формат (например, с помощью __toString (), если тип переменной это поддерживает).
- Приоритет, который может быть одним из: JLog::EMERGENCY, JLog::ALERT, JLog::CRITICAL, JLog::ERROR, JLog::WARNING, JLog::NOTICE, JLog::INFO, JLog::DEBUG (основано на уровнях серьёзности syslog / RFC 5424 – подробнее в материале Wikipedia о syslog).
- Категория, которая является просто текстовой строкой. Вы можете определить любые категории, которые вам нравятся. Лучше всего определять их, чтобы избежать возможных конфликтов с другими расширениями.
Если вы включите диагностические сообщения отладки в ваше расширение, то это может быть очень полезно при устранении неполадок. В этом случае добавьте к своему лог сообщению проверку на JDEBUG:
if (JDEBUG)
{
JLog::add('my debug message', JLog::DEBUG, 'my-debug-category');
}
Логирование в определённый файл логов
Вы можете использовать JLog::addLogger(), чтобы настроить ведение логов в дополнительный файл логов, отфильтровывая сообщения логов по приоритету (уровень серьезности) и / или категории. Параметры JLog::addLogger():
- массив с деталями конфигурации - включая имя файла логов
- уровни серьезности, которые будут логироваться в этом файле
- массив категорий, которые будут логироваться в этом файле (или если для параметра 4 установлено значение true, тогда этот массив определяет категории, которые НЕ должны регистрироваться в файле)
- (часто пропускается) логическое значение, указывающее, является ли параметр 3 списком включения (по умолчанию P4 = false) или списком исключения (P4 = true)
Например, если вы разработали расширение 'com_helloworld', вы можете использовать следующее:
JLog::addLogger(
array(
// Sets file name
'text_file' => 'com_helloworld.log.php'
),
// Sets messages of all log levels to be sent to the file.
JLog::ALL,
// The log category/categories which should be recorded in this file.
// In this case, it's just the one category from our extension.
// We still need to put it inside an array.
array('com_helloworld')
);
Затем, когда вы логируете сообщение, укажите категорию 'com_helloworld', как в примере ниже
JLog::add(JText::_('COM_HELLOWORLD_ERROR_MESSAGE_123'), JLog::ERROR, 'com_helloworld');
Это приведет к тому, что ваше сообщение будет записано в com_helloworld.log.php. Если в настройках плагина «Система - Отладка» для параметра «Протоколировать все» задано значение «Да», то это сообщение появится и в общем файле журнала everything.php.
Примечание: Вы можете объединить это с Display error messages and notices для отображения видимых уведомлений об ошибках для пользователей.
Вы также можете добавить дополнительный логгер для сбора только критических и аварийных уведомлений:
JLog::addLogger(
array(
// Sets file name.
'text_file' => 'com_helloworld.critical_emergency.php'
),
// Sets critical and emergency log level messages to be sent to the file.
JLog::CRITICAL + JLog::EMERGENCY,
// The log category which should be recorded in this file.
array('com_helloworld')
);
Вы также можете исключить определенный уровень приоритета от включения в файл логов. Например, чтобы логировать все сообщения кроме DEBUG:
JLog::addLogger(
array(
// Sets file name.
'text_file' => 'com_helloworld.all_but_debug.php'
),
// Sets all but DEBUG log level messages to be sent to the file.
JLog::ALL & ~JLog::DEBUG,
// The log category which should be recorded in this file.
array('com_helloworld')
);
Уровни приоритета JLog реализованы в виде отдельных битов целого числа, поэтому вы можете использовать побитовые операции (побитовое AND, &; и побитовое NOT, ~) для вычисления подходящих уровней логов. JLog::All является постоянным целым числом, в котором установлены все соответствующие биты, поэтому включены все уровни приоритета Joomla.
Форматирование файла логов
Первый параметр addLogger может иметь несколько необязательных дополнительных настроек в дополнение к параметру text_file.
Например, есть параметр text_entry_format, указывающий формат каждой строки в вашем лог файле.
Формат по умолчанию:
'{DATETIME} {PRIORITY} {CATEGORY} {MESSAGE}'
Вот пример другого формата, который показывает, как пропустить категорию:
JLog::addLogger(
array(
// Sets file name.
'text_file' => 'com_helloworld.critical_emergency.php',
// Sets the format of each line.
'text_entry_format' => '{DATETIME} {PRIORITY} {MESSAGE}'
),
// Sets all but DEBUG log level messages to be sent to the file.
JLog::ALL & ~JLog::DEBUG,
// The log category which should be recorded in this file.
array('com_helloworld')
);
Помимо заполнителей (placeholders), показанных выше в строке по умолчанию, доступны следующие значения:
{CLIENTIP} (this is the IP address of the client)
{TIME}
{DATE}
Существует дополнительный необязательный логический параметр text_file_no_php, который указывает, следует ли добавлять в файл логов обычный префикс:
#
#<?php die('Forbidden.');?>
Примечание: Обычно вам не следует устанавливать для этого параметра значение false. Файлы логов не должны быть доступны для чтения извне, поскольку они могут предоставить злоумышленникам ценную информацию о вашей системе. Изменяйте этот параметр, только если вы знаете, что делаете!
Кроме того, если вы хотите сохранить файл логов где-то еще, а не по пути, указанному в общих настройках Joomla, вы можете изменить параметр text_file_path.
Логирование в другие места
Помимо логирования в файлы, вы также можете логировать в другие места, такие как
- область сообщений Joomla (сообщение отображается, если вы вызываете JFactory::getApplication()->enqueueMessage())
- таблица базы данных
- просто echo
Из них, пожалуй, наиболее полезным является логирование в панель сообщений, которое можно настроить следующим образом:
JLog::addLogger(array('logger' => 'messagequeue'), JLog::ALL, array('msg-error-cat'));
Затем, когда вы делаете:
JLog::add('сообщение об ошибке для отображения', JLog::ERROR, 'msg-error-cat');
вы получаете сообщение, скопированное на панель сообщений.
Обратите внимание, что код ядра Joomla настраивает запись в очередь сообщений для категории 'jerror', поэтому, если вы используете эту категорию в своих сообщениях журнала, вы получите сообщение, отображаемое на панели сообщений.
Например:
JLog::add ('ошибка скопирована на панель сообщений', JLog::ERROR, 'jerror');
приведет к тому, что сообщение будет отображаться в области сообщений Joomla, даже если вы явно не настроили такое поведение для своего логгера.
Исключения
JLog::add() кидает исключение, если не может записать в файл логов. Чтобы избежать этого, вам придется либо обернуть вызов в другую функцию, либо реализовать свой собственный класс логгера, а затем включить его:
JLog::addLogger(
array(
// Use mycustomlogger.
'logger' => 'mycustomlogger',
'text_file' => 'com_helloworld.errors.php'
),
JLog::ALL,
array('com_helloworld')
);
Что ещё почитать
Логирование в Joomla должно использоваться в тандеме с исключениями PHP, а не в качестве замены. Подробнее в Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1.


