Zend_Log 配置使用示例

让人想犯罪 __ 提交于 2019-12-03 08:49:27

Zend Framework 框架的使用范围已经越来越广了啊。不像前几年网上的中文资料都非常的少。最近也在用Zend Framework 框架做项目。其中使用到了Zend_Log组件,特将配置发下来和大家分享一下。

1、修改 Bootstrap.php,在其中加入_initLog()函数。

protected function _initLog()

{

    $log = $this->getOption('log');     

    $curLogDir = $log['dir'] . date('Ym');

    $logFile = $log['dir'] . date('Ym'). '/'. date('d') .'.txt';    

    if( !is_dir( $curLogDir ) ){

        try {

            mkdir( $curLogDir , 0700);

        } catch (Exception $e) {

            echo nl2br($e->__toString());

        }          

    } 

    $writer = new Zend_Log_Writer_Stream( $logFile );       

    $format = '%timestamp% %priorityName% (%priority%): %message% 

[%modules%]-[%controller%]-[%action%] '. PHP_EOL;

    $formatter = new Zend_Log_Formatter_Simple($format);

    $writer->setFormatter($formatter);        

    $logger = new Zend_Log($writer);

    $logger->addFilter((int)$log['priority']);       

    Zend_Registry::set('log',$logger);

}

它的作用如下:以年月创建目录,以日期创建日志文件;声明日志保存到文件;定义日志格式;声明日志过滤级别;存取$logger对象。$log数组元素读取了application.ini配置。

2、在Controller中设置当前的action信息

我们的Controller的关系是 abstract class Custom_Controller_RootController extends Zend_Controller_Action。在Custom_Controller_RootController中定义了log()方法:

public function log($priority,$message)

{        

   $log = Zend_Registry::get('log');

   $log->setEventItem('modules', $this->_request->getModuleName() );

   $log->setEventItem('controller', $this->_request->getControllerName() );

   $log->setEventItem('action', $this->_request->getActionName() );

   $log->log($message, $priority);

}

它的作用是:获取在_initLog()定义的$logger对象,为对象添加modules/controller/action 元素;为什么这三个元素要在这里定义呢,因为只有执行到这里我们才知道分发到了哪个控制器。我们在日志里记录这三个元素就是在查看日志时容易定位问题位 置。

3、在继承自Custom_Controller_RootController类中调用

class UserController extends Custom_Controller_DefaultController中定义了indexAction()方法:

public function indexAction()

{   

   $this->log(4,'资金操作出错');

}

4、日志文件信息

2011-04-07T10:11:28+08:00 WARN (4): 资金操作出错 [default]-[user]-[index]

以上就是配置的全过程,如果不记录当前的modules/controller/action倒是简单多了。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!