JLog - логирование средствами Joomla
простое журналиварование
рейтинг: 6.9/10, голосов: 8
Бывают случаи, когда необходимо где-то на сервере вести логи ошибок, либо других важных событий в файл (например брутфорс аккаунтов). Самостоятельно открывать/закрывать файлы, соблюдать форматирование (чтобы читабельность не сбивалась), добавлять даты и прочее — это страшная рутина.
Взять на себя все эти трудности может стандартный класс Joomla — JLog. Он предоставляет удобное API, для работы с лог-файлами. Рассмотрим его работу на примере.
// Подключаем библиотеку JLog
jimport('joomla.error.log');
// Инициализация JLog-объекта, файл логов будет называться "my.log.php"
$log = &JLog::getInstance('my.log.php');
// Добавляем какие-то данные строку в лог
$log->addEntry(array('LEVEL' => '1','STATUS' => 'SOME ERROR:','COMMENT' => 'Your message here'));
// Добавляем еще какие-то данные строку в лог
$log->addEntry(array('LEVEL' => '1','STATUS' => 'Username:','COMMENT' => $username));
В итоге будет записаны в файл по адресу
<siteroot>/logs/my.log.php
Сообщения примерно следующего вида
#<?php die('Direct Access To Log Files Not Permitted'); ?>
#Version: 1.0
#Date: 2011-03-20 19:34:20
#Fields: date time level c-ip status comment
#Software: Joomla! 1.5.22 Stable [ senu takaa ama woi ] 04-November-2010 18:00 GMT
2011-03-20 19:34:20 1 127.0.0.1 SOME ERROR: Your message here
2011-03-20 19:34:20 1 127.0.0.1 Username: smet.denis
Стоит отметить некоторые моменты
- Текущая дата и IP-адрес были автоматически вписаны в файл
- В шапке стоит защита от прямого чтения лога, поэтому безопаснее будет файл логов называть *.php, либо защищаться с помощью .htaccess
- В шапке сохранена расшифровка лога по полям "#Fields"
Дополнительные параметры для JLog
При инициализации можно явно указывать следующие парметры
getInstance($file, $options, $path)
- $file - имя лог файла, по умолчанию "error.php"
- $options - настройки форматирования логов, по умолчанию будет использваться
"{DATE}\t{TIME}\t{LEVEL}\t{C-IP}\t{STATUS}\t{COMMENT}", где например STATUS - регистронезависимый ключ из массива для addEntry()
- $path - полный путь до директории с логами сайта, по умолчанию будет использоваться из глобальных настроек Joomla (<siteroot>/logs)
Пример использования
Стоит отметить некоторые моменты
- Текущая дата и IP-адрес были автоматически вписаны в файл
- В шапке стоит защита от прямого чтения лога, поэтому безопаснее будет файл логов называть *.php, либо защищаться с помощью .htaccess
- В шапке сохранена расшифровка лога по полям «#Fields»
Дополнительные параметры для JLog
При инициализации можно явно указывать следующие парметры
getInstance($file, $options, $path)
- $file — имя лог файла, по умолчанию «error.php»
- $options — настройки форматирования логов, по умолчанию будет использваться
»{DATE}\t{TIME}\t{LEVEL}\t{C-IP}\t{STATUS}\t{COMMENT}», где например STATUS — регистронезависимый ключ из массива для addEntry()
- $path — полный путь до директории с логами сайта, по умолчанию будет использоваться из глобальных настроек Joomla (<siteroot>/logs)
Пример использования
Если лог предвидится большой, то лучше использовать имя лога, зависимое от текущей даты. Например
// Каждый день новый лог файл
define('ERROR_LOG', 'notes.log.'.date('Y_m_d')'.php');
Примечание: Стандартный плагин system/log.php работает по тому же принципу. Если его включить, то будут отслеживаться все неудачные попытки зайти в панель управления.
According to my own monitoring, thousands of persons in the world get the <a href="/ http://goodfinance-blog.com/topics/mortgage-loans ">mortgage loans</a> at various creditors. Therefore, there's a good possibility to receive a student loan in any country.
Доброго времени суток всем.
Столкнулся с проблемой ведения логов в Joomla! 2.5.x, потратил много времени на поиск простого решения.
Для того что бы Вы не теряли его:
// Подключаем файл класса, обратите внимание, что он изменился в сравнении с Joomla! 1.5 API.
jimport('joomla.log.log');
// Добавляем логгер:
JLog::addLogger(
// Массив параметров:
array(
// Файл для логов:
'text_file' => 'test.log.php',
// (необязательный параметр) Директория для логов:
'text_file_path' => 'somewhere/logs'
)
);
// Запись лог сообщения:
JLog::add('Это сообщения для записи в лог файл');
Проверено, работает.
ЗЫ: это решение подходит для всей платформы Platform 11.4, т.е. и для Joomla! 1.7.