Php 更好地实现全局Zend_日志实例?
有没有更好的方法来拥有全局可访问的Zend_日志对象 在Bootstrap.php中,我正在做: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(
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);