Как использовать экземпляр Zend_Log, который был создан с использованием Zend_Application_Resource_Log в классе модели - PullRequest
0 голосов
/ 02 июня 2010

Наш Zend_Log инициализируется только добавлением следующих строк в application.ini

resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.mode = "a"

Так что Zend_Application_Resource_Log создаст для нас экземпляр.

Мы уже можем получить доступ к этому экземпляру вконтроллеры с помощью следующего:

public function getLog()
{
    $bootstrap = $this->getInvokeArg('bootstrap');

    //if (is_null($bootstrap)) return false;

    if (!$bootstrap->hasPluginResource('Log')) {
        return false;
    }
    $log = $bootstrap->getResource('Log');
    return $log;
}   

Пока все хорошо.

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

Нашей первой идеей было зарегистрировать тот же экземпляр Log в Zend_Registry, чтобы иметь возможность использовать Zend_Registry :: get ('Zend_Log') везде, где мы хотим:

в нашем классе Bootstrap:

protected function _initLog() {      
    if (!$this->hasPluginResource('Log')) {
        throw new Zend_Exception('Log not enabled');
    }

$log = $this->getResource('Log');

    assert( $log != null);

    Zend_Registry::set('Zend_Log', $log);
}

К сожалению, это утверждение не выполняется ==> $ log IS NULL --- но почему ??

Понятно, что мы могли бы просто инициализировать Zend_Log вручную во время начальной загрузки, не используя автоматизм Zend_Application_Resource_Log, поэтомутакие ответы не принимаются.

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

Это окончательное решение. Мы не будем вызывать функцию _initLog ()

.

Большое спасибо ArneRie!

// Do not call this function _initLog() ! 
protected function _initRegisterLogger() {
    $this->bootstrap('Log');

    if (!$this->hasPluginResource('Log')) {
        throw new Zend_Exception('Log not enabled in config.ini');
    }

    $logger = $this->getResource('Log');
    assert($logger != null);
    Zend_Registry::set('Zend_Log', $logger);
}
2 голосов
/ 02 июня 2010

Возможно, он не загружен в настоящее время, попробуйте:

    try {
            $this->bootstrap('log'); // bootstrap log
            $logger = $this->getResource('log');
        } catch (Zend_Application_Bootstrap_Exception $e) {
            $logger = new Zend_Log();
            $writer = new Zend_Log_Writer_Null();
            $logger->addWriter($writer);
        }
        $registry = Zend_Registry::set('logger', $logger);
...