%24 %799 %2013 %02:%十 %AM

Joomla日志类的实现及使用方法01

作者
给本项目评分
(1 投票)

本文将介绍JLog类的使用方法。以及顺带对Joomla日志类进行一些分析。

 


 

先看一下Joomla的系统日志:

在安装目录下有一个文件夹logs.这是joomla系统日志默认存放的文件夹。原始状态这个文件夹只有一个空的index.html文件。是由一段时间后你会发现下面会多出一个error.php文件。

一个典型的error.php文件的内容如下:

#
#<?php die('Forbidden.'); ?>
#Date: 2013-10-24 07:49:38 UTC
#Software: Joomla Platform 11.4.0 Stable [ Brian Kernighan ] 03-Jan-2012 00:00 GMT
#Fields: date time priority clientip category message
2013-10-24 07:49:38 INFO 127.0.0.1 Joomla FAILURE: 无效的密码

这个文件是系统日志插件产生,该插件响应onUserLoginFailure事件。插件的代码如下:

 
 // no direct access
defined('_JEXEC') or die;

/**
 * Joomla! System Logging Plugin
 *
 * @package		Joomla.Plugin
 * @subpackage	System.log
 */
class  plgSystemLog extends JPlugin
{
	function onUserLoginFailure($response)
	{
		$log = JLog::getInstance();
		$errorlog = array();

		switch($response['status'])
		{
			case JAuthentication::STATUS_SUCCESS :
			{
				$errorlog['status']  = $response['type'] . " CANCELED: ";
				$errorlog['comment'] = $response['error_message'];
				$log->addEntry($errorlog);
			} break;

			case JAuthentication::STATUS_FAILURE :
			{
				$errorlog['status']  = $response['type'] . " FAILURE: ";
				if ($this->params->get('log_username', 0)) {
					$errorlog['comment'] = $response['error_message'] . ' ("' . $response['username'] . '")';
				}
				else {
					$errorlog['comment'] = $response['error_message'];
				}
				$log->addEntry($errorlog);
			}	break;

			default :
			{
				$errorlog['status']  = $response['type'] . " UNKNOWN ERROR: ";
				$errorlog['comment'] = $response['error_message'];
				$log->addEntry($errorlog);
			}	break;
		}
	}
}

以上代码的逻辑比较简单。判断登录失败原因,然后记录到日志文件中。通过上面的代码,我们大概可以知道该怎样使用JLog类了。

 
   $log = JLog::getInstance();//调用JLog类的getInstance()方法,得到一个JLog实例。
   $errorlog = array();//定义一个储存日志信息的数组
   $errorlog['status'] = "";
   $errorlog['comment']="";//设置错误信息的comment字段
   $log->addEntry($errorlog);//调用JLog类的addEntry方法,将错误信息写入到日志文件中
  

现在,可以在自己的扩展中使用JLog类类记录日志了。

 在自己开发的Guestbook组件中测试使用下面代码:

   		$log = Jlog::getInstance();
		$info = array();
		$info['comment']="恭喜,留言成功提交";
		$log->addEntry($info);
 

error.php文件的内容:

#
#<?php die('Forbidden.'); ?>
#Date: 2013-10-24 07:49:38 UTC
#Software: Joomla Platform 11.4.0 Stable [ Brian Kernighan ] 03-Jan-2012 00:00 GMT
#Fields: date time priority clientip category message
2013-10-24 07:49:38 INFO 127.0.0.1 Joomla FAILURE: 无效的密码
2013-10-24 14:55:39 INFO 127.0.0.1 - 恭喜,留言成功提交

说明成功的记录了这样一条日志信息。

简要的说一下日志的格式:

时间  日期  优先级(Joomla提供多种日志优先级) 记录信息的IP地址   那一个程序记录的日志   日志的内容

说实在,我不怎样想让我的信息记录到error.php文件中,我想在自己的组件目录下放置日志文件,这样可以实现吗?在回答这个问题之前,最好的方法就是看源代码。

 


 

在网站根目录下 libraries\joomla\log文件夹下是joomla日志类的实现文件。看一下文件结构:

entry.php  文件   log.php 文件 logexception.php文件   logger.php文件  

loggers文件夹  

在loggers文件夹下有如下文件:

database.php   echo.php  formattedtext.php  messagequeue.php  syslog.php w3c.php

文件大体一看,有10个之多,不过还好,每个文件的大小都不是很大。下面将简要的分析一个几个文件的源码。由于本篇文章太长了,另外再写一篇文章继续。

阅读 9351 次数 最后修改于 %22 %694 %2014 %23:%二 %PM