先看一下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个之多,不过还好,每个文件的大小都不是很大。下面将简要的分析一个几个文件的源码。由于本篇文章太长了,另外再写一篇文章继续。