Записывать каждый запрос в ZF2

Мы используем Zend Framework 2 для нового приложения, я хотел бы иметь ту же систему журналирования Rails или аналогичную, я хотел бы иметь журнал для каждого запроса, возможно ли сделать это в Zend?

2 ответа

Решение

Это зависит от того, что вы хотите войти. Если это просто журнал доступа, вы должны попытаться использовать журнал веб-сервера. Журналы из Apache/nginx/IIS и т. Д. Работают лучше, чем вы достигли в своем приложении ZF2.

Если вам нужно войти в приложение ZF2, у вас есть два варианта. Первый вариант на bootstrap, Это один из самых ранних вариантов, который вы можете использовать, поэтому, вероятно, поэтому самый лучший. Тем не менее, вы также можете посмотреть на route или же dispatch, Эти два события вызываются на этапе запуска приложения. С этими событиями у вас есть, например, доступное совпадение маршрута и, следовательно, вы знаете (или нет), соответствует ли ваш запрос какому-либо контроллеру (или в случае, если у вас нет совпадения, это 404).

Некоторые примеры. Предположим, у вас есть регистратор, настроенный в ServiceManager под logger ключ. Затем войти в bootstrap:

namespace Application;

class Module
{
  public function onBootstrap($e)
  {
    $app = $e->getApplication();
    $sm  = $app->getServiceManager();

    $logger = $sm->get('logger');
    $logger->debug('Log here!');
  }
}

Или, например, если вы ждете routeПрикрепляешь слушателя к route событие:

namespace Application;

use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;

class Module
{
  public function onBootstrap($e)
  {
    $app = $e->getApplication();
    $em  = $app->getEventManager();
    $sm  = $app->getServiceManager();

    $logger = $sm->get('logger');
    $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($logger) {
      $match = $e->getRouteMatch();

      // No route, this is a 404
      if (!$match instanceof RouteMatch) {
        return;
      }

      $logger->debug(sprintf(
        'Route event with route %s',
        $match->getMatchedRouteName()
      ));
    });
  }
}

Похоже, вы могли бы прикрепить слушателя к dispatch событие на Zend\Mvc\Application,

Для справки, Роб Аллен создал удобный список событий ZF2.

Другие вопросы по тегам