Küresel Zend_Log örneğinin daha implementaion?

3 Cevap php

Küresel erişilebilir Zend_Log nesne olması için daha iyi bir yolu var mı?

Bootstrap.php ben yapıyorum:

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);
}

Sonra uygulama boyunca kullanacağım:

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

Bu sanırım korkunç değil. Bu sadece tür ayrıntılı görünüyor.

3 Cevap

Bu alıntı newsgroup entry:

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

to apply the helper all you have to do is to put in the init() function of Michael's example this line:

Zend_Controller_Action_HelperBroker::addHelper(new My_Helper_Logger());

and in every action of your controllers now you can access the logger as $this->logger

Orada diğer önerileri bir sayıdır, yani bağlantıyı kontrol edin.

iyi bir 'yönetici sınıf' sarın olabilir:

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);
  }
}

Eğer herkesi kucaklayan bir örnek gibi bir şey, ya da uygulayarak __call ya da ne ya istiyorum ancak o zaman statik yöntemler kurmak olabilir. o zaman My_Log_Manager::<methodName>() gibi bu sınıf üzerinde statik yöntemi çağırmak jsut olabilir.

Sen addWriter() tek bir satır kaldırmak için atlama deneyebilirsiniz:

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