本文将介绍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 message2013-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 message2013-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文件中,我想在自己的组件目录下放置日志文件,这样可以实现吗?在回答这个问题之前,最好的方法就是看源代码。 在网站根目录下 librariesjoomlalog文件夹下是joomla日志类的实现文件。看一下文件结构: entry.php 文件 log.php 文件 logexception.php文件 logger.php文件 loggers文件夹 在loggers文件夹下有如下文件: database.php echo.php formattedtext.php messagequeue.php syslog.php w3c.php 文件大体一看,有10个之多,不过还好,每个文件的大小都不是很大。下面将简要的分析一个几个文件的源码。由于本篇文章太长了,另外再写一篇文章继续。