Log in / Register
Login to your account
Remember Me
Create an account
Fields marked with an asterisk (*) are required.
Reload Captcha

Логирование в Joomla 3. Простой подход.

Rate this item
(4 votes)

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

Создадим функцию в файле с которым вы работаете.

    /* Логирование.*/
	function setLog ($message = 'logOk', $types = 'in', $category = 'my_log')
    {
		switch ($types) {
			case em:
				$type = JLog::EMERGENCY;
				break;
			case al:
				$type = JLog::ALERT;
				break;
			case cr:
				$type = JLog::CRITICAL;
				break;
			case er:
				$type = JLog::ERROR;
				break;
			case wa:
				$type = JLog::WARNING;
				break;
			case no:
				$type = JLog::NOTICE;
				break;
			case in:
				$type = JLog::INFO;
				break;
			case de:
				$type = JLog::DEBUG;
				break;
		}
		
		jimport('joomla.log.logger.formattedtext');
		$options = array( 'text_file' => 'com_mycom_'.date('Y_m_d').'.php', 'text_file_path' => null, 'text_file_no_php' => false, 'text_entry_format' => '' );
		$logger = new JLogLoggerFormattedtext( $options );
		$log = new JLogEntry( $message, $type, $category, '', array() );
		$logger->addEntry( $log );
		return true;
	}

А для того чтоб вызвать эту функцию в любом месте нашей модели пропишем так.

$this->setLog( JText::_('Invalid Token'), 'er', 'model_myform' );

Рассмотрим подробнее.

  • Первым параметром передаваемым в функцию будет текст сообщения.
  • Вторым тип ошибки или сообщения. (опишу ниже)
  • Третьим категория.

С текстом сообщения думаю все и так ясно.

Тип ошибки состоит из первых двух строчных букв заголовка.

// Системные ошибки CMS
    JLog::EMERGENCY
// Ошибки требующие немедлонного исправления
    JLog::ALERT
// Критические ошибки системы
    JLog::CRITICAL
// Ошибки некорректной работы программы/системы/CMS
    JLog::ERROR
// Ошибки предупреждающие о некорректости работы программы/системы/CMS
    JLog::WARNING
// Уведомления о не значительных, но требующих исправления ошибках
    JLog::NOTICE
// Информационное сообщение
    JLog::INFO
// Отладочное сообщение
    JLog::DEBUG

В категории я использую имя файла в которм вызвана функция т.е. файл с ошибкой. Это позволяет быстро найти проблему в больших компонентах.

Рассмотрим функцию.

jimport('joomla.log.logger.formattedtext'); - Подгрузка библиотеки.

$options - массив конфигурационных параметров, где:

  • text_file - Имя текстового файла для логирования, по умолчанию 'error.php'
  • text_file_path - Путь к папке с логами (если параметр отсутствует, путь возьмется из конфига)
  • text_file_no_php - Параметр проверяющий формат, если файл .php используем тип false, если текстовый или другой формат, то true
  • text_entry_format - Форматирование записываемого текста/сообщения

$logger = new JLogLoggerFormattedtext( $options ); - Загружаем класс с параметрами

$log = new JLogEntry() - Данные для записи, где:

  • $message - Текст сообщения.
  • $type - Тип ошибки.
  • $category - Категория.
  • дата - В формате ГГГГ-ММ-ДД ЧЧ:ММ:СС. По умолчанию, создает текущую дату и время на сервере.
  • array() - Массив с дополнительными контекстными сообщениями.

$logger->addEntry( $log ); - Запись в лог.

После разработки функцию можно удалить, а можно и оставить для критических ошибок.

Leave a comment