Using JLog/ru: Difference between revisions

From Joomla! Documentation

No edit summary
FuzzyBot (talk | contribs)
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, still
             // In this case, it's just the one category from our extension.
             // we need to put it inside an array
             // 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]].
Другое руководство (немного устаревшее, но все же полезное) находится по адресу [http://eddify.me/posts/logging-in-joomla-with-jlog.html Logging in Joomla with JLog].


<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');

Параметры

  1. Строка сообщения. Вы можете использовать перевод, например, JText::_('MY_EXTENSION_ERR_MSG'). Вы также можете отображать значения переменных при условии, что вы конвертируете их в строковый формат (например, с помощью __toString (), если тип переменной это поддерживает).
  2. Приоритет, который может быть одним из: JLog::EMERGENCY, JLog::ALERT, JLog::CRITICAL, JLog::ERROR, JLog::WARNING, JLog::NOTICE, JLog::INFO, JLog::DEBUG (основано на уровнях серьёзности syslog / RFC 5424 – подробнее в материале Wikipedia о syslog).
  3. Категория, которая является просто текстовой строкой. Вы можете определить любые категории, которые вам нравятся. Лучше всего определять их, чтобы избежать возможных конфликтов с другими расширениями.

Если вы включите диагностические сообщения отладки в ваше расширение, то это может быть очень полезно при устранении неполадок. В этом случае добавьте к своему лог сообщению проверку на JDEBUG:

   if (JDEBUG)
   {
       JLog::add('my debug message', JLog::DEBUG, 'my-debug-category');
   }

Логирование в определённый файл логов

Вы можете использовать JLog::addLogger(), чтобы настроить ведение логов в дополнительный файл логов, отфильтровывая сообщения логов по приоритету (уровень серьезности) и / или категории. Параметры JLog::addLogger():

  1. массив с деталями конфигурации - включая имя файла логов
  2. уровни серьезности, которые будут логироваться в этом файле
  3. массив категорий, которые будут логироваться в этом файле (или если для параметра 4 установлено значение true, тогда этот массив определяет категории, которые НЕ должны регистрироваться в файле)
  4. (часто пропускается) логическое значение, указывающее, является ли параметр 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.