Записывать каждый запрос в 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.