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

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

Solutions Collecting From Web of "Зарегистрируйте каждый запрос в ZF2"

Это зависит от того, что вы хотите регистрировать. Если это только журнал доступа, вы должны попытаться использовать журнал веб-сервера. Журналы из 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() )); }); } } в 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 .