[英]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.