Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更好地实现全局Zend_日志实例?_Php_Zend Framework - Fatal编程技术网

Php 更好地实现全局Zend_日志实例?

Php 更好地实现全局Zend_日志实例?,php,zend-framework,Php,Zend Framework,有没有更好的方法来拥有全局可访问的Zend_日志对象 在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(

有没有更好的方法来拥有全局可访问的Zend_日志对象

在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_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示例的方法,或者通过实现
\uu call
或其他方法来设置静态方法。然后,您可以调用该类上的静态方法,如
My_Log\u Manager::()

引用以下内容:

要应用helper,只需将 Michael示例的作用如下:

现在,在控制器的每个动作中,您都可以访问记录器 作为$this->logger


还有许多其他建议,请查看链接。

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

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

+1对于允许控制器访问
$this->logger
的解决方案,在阅读一些新闻组后,此方法的一个缺点是您无法在模型、视图帮助程序和/或资源插件中登录。不过,您可以从控制器将其插入视图或模型中。
Zend_Controller_Action_HelperBroker::addHelper(new My_Helper_Logger());
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../app.log');  
$logger = new Zend_Log($writer);  
Zend_Registry::set('log', $logger);