繁体   English   中英

全局Zend_Log实例的更好实现?

[英]better implementaion of a global Zend_Log instance?

有没有更好的方法可以全局访问Zend_Log对象?

在Bootstrap.php中,我正在做:

protected function _initLogging()
{
    $logger = new Zend_Log();
    $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../app.log');
    $logger->addWriter($writer);
    Zend_Registry::set('log', $logger);
}

然后,在整个应用程序中,我将使用:

Zend_Registry::get('log')->debug('hello world');

我猜这并不可怕。 似乎有点冗长。

引用此新闻组条目

class My_Helper_Logger extends Zend_Controller_Action_Helper_Abstract
{
  function init()
  {
    $this->getActionController()->logger = $this->getActionController()
                                                  ->getInvokeArg('bootstrap')
                                                    ->getResource('logger');
  }
}

要应用帮助程序,您需要做的就是在Michael的示例的init()函数中添加以下代码:

Zend_Controller_Action_HelperBroker::addHelper(new My_Helper_Logger());

现在您可以在控制器的每个操作中以$ this-> logger身份访问记录器

还有许多其他建议,因此请检查链接。

好吧,您可以将其包装在“经理类”中:

class My_Log_Manager
{
  static $_instance = null;
  protected $_logInstance = null;

  public static function getInstance(){}
  public function getLogInstance(){}
  public static function log($level, $msg)
  {
     self::getInstance()->_logInstance->$level($msg);
  }
}

然后,您可以设置静态方法,但是可以使用catchall示例之类的方法,也可以通过实现__call或其他方法来设置。 那么您可以jsut调用该类的静态方法,例如My_Log_Manager::<methodName>()

您可以尝试跳过addWriter()删除一行:

$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../app.log');  
$logger = new Zend_Log($writer);  
Zend_Registry::set('log', $logger);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM