代码之家  ›  专栏  ›  技术社区  ›  Alex

如何使用在模型类中使用Zend\u应用程序\u资源\u日志创建的Zend\u日志实例

  •  0
  • Alex  · 技术社区  · 15 年前

    resources.log.stream.writerName = "Stream"
    resources.log.stream.writerParams.mode = "a"
    

    所以Zend\u Application\u Resource\u Log将为我们创建实例。

    我们已经可以通过以下方式在控制器中访问此实例:

    public function getLog()
    {
        $bootstrap = $this->getInvokeArg('bootstrap');
    
        //if (is_null($bootstrap)) return false;
    
        if (!$bootstrap->hasPluginResource('Log')) {
            return false;
        }
        $log = $bootstrap->getResource('Log');
        return $log;
    }   
    

    到目前为止,还不错。

    现在我们想在模型类中使用相同的日志实例,在那里我们不能访问引导。

    我们的第一个想法是在Zend\u Registry中注册同一个日志实例,以便能够在任何地方使用Zend\u Registry::get('Zend\u Log'):

    protected function _initLog() {      
        if (!$this->hasPluginResource('Log')) {
            throw new Zend_Exception('Log not enabled');
        }
    
    $log = $this->getResource('Log');
    
        assert( $log != null);
    
        Zend_Registry::set('Zend_Log', $log);
    }
    

    不幸的是,此断言失败==>$日志为空---但是为什么??

    很明显,我们可以在引导过程中手动初始化Zend\u日志,而不使用Zend\u应用程序\u资源\u日志的自动性,因此这种回答将不被接受。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Alex    15 年前

    这是最终的解决办法。我们基本上不会调用函数\u initLog()

    非常感谢阿内里!

    // Do not call this function _initLog() ! 
    protected function _initRegisterLogger() {
        $this->bootstrap('Log');
    
        if (!$this->hasPluginResource('Log')) {
            throw new Zend_Exception('Log not enabled in config.ini');
        }
    
        $logger = $this->getResource('Log');
        assert($logger != null);
        Zend_Registry::set('Zend_Log', $logger);
    }
    
        2
  •  2
  •   opHASnoNAME    15 年前

    可能此时未引导,请尝试:

        try {
                $this->bootstrap('log'); // bootstrap log
                $logger = $this->getResource('log');
            } catch (Zend_Application_Bootstrap_Exception $e) {
                $logger = new Zend_Log();
                $writer = new Zend_Log_Writer_Null();
                $logger->addWriter($writer);
            }
            $registry = Zend_Registry::set('logger', $logger);