ZF2. Почему не работает Zend\Log\Logger::registerErrorHandler?

Зравствуйте.
В проекте на Zend Framework 2 делаю свой лог:
public function indexAction()
    {     
        $writer = new \Zend\Log\Writer\Stream($_SERVER['DOCUMENT_ROOT'].'/logs/log');
        $logger = new \Zend\Log\Logger();
        $logger->addWriter($writer);
        \Zend\Log\Logger::registerErrorHandler($logger); 
        $logger->info('Тест ошибки');
        // тут намеренно делаем ошибку, чтобы увидеть её в логах
        return;
    }


В логах вижу:
2014-05-16T12:40:58+04:00 INFO (6): Тест ошибки

А самого сообщения об ошибке нет!
В чём может быть проблема?
  • Вопрос задан
  • 2942 просмотра
Пригласить эксперта
Ответы на вопрос 1
Keanor
@Keanor
Ведущий разработчик
Ты задаешь текст:
$logger->info('Тест ошибки');

И получаешь его в логе:
2014-05-16T12:40:58+04:00 INFO (6): Тест ошибки

какой еще текст ты хочешь в нем получить?

Исключения фреймворка, и особый тип ошибок так не выловишь.

У нас используется следующий код

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $eventManager = $e->getApplication()->getEventManager();
        $this->attachEventListeners($eventManager);

        $eventManager->attach('dispatch.error', function ($event) use ($e) {
            $sm = $e->getApplication()->getServiceManager();
            $service = $sm->get('Application\Service\ErrorHandling');

            $exception = $event->getResult()->exception;
            if ($exception)
                $service->logException($exception);
        });

        set_error_handler(function($c, $m, $f, $l) use ($e) {
            $sm = $e->getApplication()->getServiceManager();
            $service = $sm->get('Application\Service\ErrorHandling');
            $service->logException(func_get_args());
        });

        register_shutdown_function(function() use ($e) {
            $error = error_get_last();
            $sm = $e->getApplication()->getServiceManager();

            if ($error && ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR))
            {
                $service = $sm->get('Application\Service\ErrorHandling');
                if (strpos($error['message'], 'Allowed memory size') == 0)
                {
                    ini_set('memory_limit', (intval(ini_get('memory_limit'))+64)."M");
                }
                $service->logException($error);
            }
        });
    }

    ....
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы