打印本页
%25 %149 %2014 %10:%六 %AM

再谈JLog的使用

作者
给本项目评分
(2 得票数)

再次来谈一下JLog的使用。一直都对joomla log的使用感到困惑,虽然以前也用过Jlog类帮助调试程序,但是发现joomla使用jlog的方法很别扭,所以最近再次看了一下源码和官方文档,觉得有所收获。

 

要使用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}') ,来配置日志文件的字段格式,注意空格。
阅读 6250 次数 最后修改于 %25 %233 %2014 %12:%六 %PM