要使用JLog,首先需要导入JLog类。导入的代码很简单:
jimport('joomla.log.log');
如果你也看过joomla官网上关于JLog的介绍,并且你也按照官网的代码来写测试程序。你应该会很吃惊,怎么代码好像都没什么作用,似乎更不就没有执行。
官网上对JLog的一般使用是用如下代码:
JLog::add(JText::_(" new add log"),JLOG::WARNING ,'jerror');
//或者
JLog::add(JText::_("new add log"),JLOG::WARNING );
但是很奇怪,我们并没有在logs文件下的error.php中找到我们刚刚记录的log信息。并且按照说明,如果加上了jerror这个参数,系统会在页面上显示这条信息的。但是一切似乎都没有发送。(当然,在我的电脑上是这样的,不清楚你们的电脑上是否也是这样?)
依据经验,我尝试开启系统程序出错功能。果然,马上在logs文件夹中出现了一个jcontroller.log.php的文件。打开一看,我们的log信息确实被记录到了这个文件中了。但是我发现加入了第三个参数jerror后,系统并没有正常处理。表示很疑惑。当再次关掉系统程序出错后,log信息有没有了。这到底怎么回事?
看了一下源码,加上一点猜想,在仔细看了一下随后的“Logging a specific extension”段的说明。大概理解了jlog的使用方法。
由于joomla提供多种记录日志的方法。文本记录,数据库记录等等。一次在使用的时候,我们应该首先配置一个logger.
配置一个logger。无非就是指定日志文件的名称,日志文件存放的位置,或者其他的以一些记录日志的等级等等操作。在Joomla中JLog类提供了一个静态的方法JLog::addLogger();这个方法就是用来配置一个logger的。
JLog::addLogger(array('text_file'=>'plg_hideadmin.log.php' ,
'text_file_path'=>JPATH_PLUGINS.DS.'system'.DS.'hideadmin') ,
JLOG::ALL ,
array('plg_hideadmin','zmax' ,'jerror'));
上面就配置了一个logger。这个loger执行日志文件的名称为plg_hideadmin.log.php。日志的路径为JPATH_PLUGINS.DS.'system'.DS.'hideadmin'.需要记录所有等日志级的JLOG::ALL。并且仅仅记录plg_hideadmin.zmax,jerror.这个3个类别的日志(。我个人觉得就是3个名称而已)。
logger配置好后,就可以开始记录log信息。典型的代码如下:
JLog::add("EROOR_MESSAGE" ,JLOG::WARNING ,'plg_hideadmin');
JLog::add(JText::_("no import new add log"),JLOG::ALERT);
JLog::add(JText::_("no import new add log"),JLOG::EMERGENCY ,"plg_hideadmin");
JLog::add(JText::_("no import new add log jeeor"),JLOG::INFO ,'jerror');
JLog::add(JText::_("no import new add log zmax"),JLOG::DEBUG ,'zmax');
JLog::add(JText::_('COM_CONTENT_ERROR_LOGIN_TO_VIEW_ARTICLE'),JLOG::DEBUG ,'zmax');
其中第一条log
JLog::add(JText::_("no import new add log"),JLOG::EMERGENCY ,"plg_hideadmin");
信息会被记录到plg_hideadmin.log.php文件中。
第二条log
JLog::add(JText::_("no import new add log"),JLOG::ALERT);
信息会被记录到jcontroller.log.php文件中。如果你打开程序除错的话。
第3,4,5条都会被记录到plg_hideadmin.log.php文件中。因为第3个参数。
有几点需要说明一下:
系统的日志等级:
JLOG::EMERGENCY
JLOG::ALERT
JLOG::CRITICAL
JLOG::ERROR
JLOG::WARNING
JLOG::NOTICE
JLOG::INFO
JLOG::DEBUG
第5条也说明了记录到日志信息中的信息如果经过JText::_()函数的输出,应该会进行翻译的。但是结果却并没有翻译。经测试已经翻译
plg_hideadmin.log.php文件节录如下:
2014-06-25T02:07:33+00:00 DEBUG - new add log
2014-06-25T02:07:59+00:00 DEBUG - no import new add log
2014-06-25T02:08:27+00:00 DEBUG - no import new add log
2014-06-25T02:11:08+00:00 EMERGENCY - no import new add log
2014-06-25T02:11:08+00:00 ALERT - no import new add log
2014-06-25T02:11:08+00:00 CRITICAL - no import new add log
2014-06-25T02:11:08+00:00 ERROR - no import new add log
2014-06-25T02:11:08+00:00 WARNING - no import new add log
2014-06-25T02:11:08+00:00 NOTICE - no import new add log
2014-06-25T02:11:08+00:00 INFO - no import new add log
2014-06-25T02:11:08+00:00 DEBUG - no import new add log
2014-06-25T02:16:24+00:00 EMERGENCY - no import new add log
到此,我们可以非常方便的使用joomla的log来记录日志了。
于2014.06.25改:
另外可以用'text_entry_format'=>'{DATETIME}{PRIORITY}{CLIENTIP}{CATEGORY}{MESSAGE}') ,来配置日志文件的字段格式,注意空格。