우리는 새로운 응용 프로그램을 위해 zend framework 2를 사용하고 있습니다. 레일즈 또는 이와 유사한 로깅 시스템을 갖고 싶습니다. 각 요청에 대한 로그를 갖고 싶습니다. Zend에서이 작업을 수행 할 수 있습니다. ?각 요청을 ZF2에 기록하십시오.
답변
달라질 수 있습니다. 무엇을 기록하고 싶습니다. 액세스 로그 일 경우 웹 서버의 로그를 사용해보십시오. 아파치/nginx/IIS 등의 로그는 ZF2 응용 프로그램에서 얻을 수있는 것보다 잘 수행됩니다.
ZF2 응용 프로그램에 로그인해야하는 경우 다음 두 가지 중에서 선택할 수 있습니다. 첫 번째 옵션은 bootstrap
입니다. 당신이 사용할 수있는 가장 초기의 옵션 중 하나이기 때문에 아마도 최고입니다. 그러나 route
또는 dispatch
을 볼 수도 있습니다. 이 두 이벤트는 응용 프로그램의 "실행"단계에서 호출됩니다. 이 이벤트를 통해 예를 들어 경로 일치를 사용할 수 있으므로 요청이 컨트롤러와 일치하는지 (또는 일치하지 않는 경우 404입니다) 알 수 있습니다 (또는하지 않음).
몇 가지 예입니다. ServiceManager
에 logger
키 아래에 로거가 구성되어 있다고 가정 해 보겠습니다. , 당신은 route
이벤트에 대한 리스너를 부착
namespace Application;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager();
$logger = $sm->get('logger');
$logger->debug('Log here!');
}
}
을 또는 예를 들어, 당신은 route
기다릴 경우 : 다음 bootstrap
에 로그인하는
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
에 연결할 수있는 것 같습니다.
참고로 Rob Allen은 ZF2 events이라는 편리한 목록을 만들었습니다.
굉장한 목록, 링크를 가져 주셔서 감사합니다! –
왜 아파치 access_log를 사용합니까? – hohner