RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

JLog — логирование средствами Joomla

простое журналирование

Бывают случаи, когда необходимо где-то на сервере вести логи ошибок, либо других важных событий в файл (например брутфорс аккаунтов). Самостоятельно открывать/закрывать файлы, соблюдать форматирование (чтобы читабельность не сбивалась), добавлять даты и прочее — это страшная рутина.

Взять на себя все эти трудности может стандартный класс 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   <nobr>127.0.0.1</nobr>  SOME ERROR: Your message here
2011-03-20  19:34:20    1   <nobr>127.0.0.1</nobr>  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)

Пример использования

Если лог предвидится большой, то лучше использовать имя лога, зависимое от текущей даты. Например

// Каждый день новый лог файл
define('ERROR_LOG', 'notes.log.'.date('Y_m_d')'.php');

Примечание: Стандартный плагин system/log.php работает по тому же принципу. Если его включить, то будут отслеживаться все неудачные попытки зайти в панель управления.

Смотрите также:
Комментарии (6) Добавить комментарий
  • LoraKaufman30
    LoraKaufman30
    31 Декабря 2011, 06:00
     ↑  -3  ↓     ответ

    According to my own monitoring, thousands of persons in the world get the <a href="/ 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.

  • Олег
    Олег
    12 Апреля 2012, 03:51
     ↑  +3  ↓     ответ

    Доброго времени суток всем.

    Столкнулся с проблемой ведения логов в 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.

  • Боб
    Боб
    08 Октября 2012, 23:29
     ↑  0  ↓     ответ

    Что-то в плагинах у Jomla 2.5 не получается таким способом получить желаемый формат лога, в частности - с IP клиента.

    Более-менее нормально получается так:

    <code>

    function getToto() {

    ...

    $log = JLog::getInstance('mylog.php');

    $log->addEntry(array('PRIORITY' => 'DEBUG', 'CATEGORY' => 'userRegistration', 'MESSAGE' => 'New User Code: '.$token));

    ...

    </code>

    однако не срабатывает LEVEL лога - всегда пишет "INFO", хотя, вот в куске кода - написано DEBUG - но будет все равно инфо 8-(

  • Алекс
    Алекс
    30 Октября 2012, 18:06
     ↑  +1  ↓     ответ

    нихера не понял че куда подключаем

  • MisterKoK
    MisterKoK
    30 Октября 2012, 18:21
     ↑  0  ↓     ответ

    // Подключаем библиотеку JLog

    Где ето прописывается? в шаблоне в файле индекс.пхп????

  • Alex
    Alex
    13 Декабря 2012, 22:12
     ↑  0  ↓     ответ

    В Joomla 2.5 описанные методы отмечены как deprecated.

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.