лучшая реализация глобального экземпляра Zend_Log? - PullRequest
3 голосов
/ 13 января 2010

Есть ли лучший способ иметь глобально доступный объект 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');

Думаю, это не ужасно. Это кажется довольно многословным.

Ответы [ 3 ]

5 голосов
/ 13 января 2010

Цитирование из этой записи группы новостей :

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

для применения помощника все, что вам нужно сделать, это поместить в init () Функция примера Майкла эта строка:

Zend_Controller_Action_HelperBroker::addHelper(new My_Helper_Logger());

и в каждом действии ваших контроллеров теперь вы можете получить доступ к логгеру как $ this-> logger

Существует ряд других предложений, поэтому проверьте ссылку.

1 голос
/ 13 января 2010

Вы можете попробовать пропустить addWriter(), чтобы удалить одну строку:

$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../app.log');  
$logger = new Zend_Log($writer);  
Zend_Registry::set('log', $logger);
1 голос
/ 13 января 2010

ну, вы могли бы обернуть это в «класс менеджера»:

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 или что-то еще. затем вы можете вызвать статические методы этого класса, например My_Log_Manager::<methodName>().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...