2013-01-15 3 views
0

우리는 새로운 응용 프로그램을 위해 zend framework 2를 사용하고 있습니다. 레일즈 또는 이와 유사한 로깅 시스템을 갖고 싶습니다. 각 요청에 대한 로그를 갖고 싶습니다. Zend에서이 작업을 수행 할 수 있습니다. ?각 요청을 ZF2에 기록하십시오.

+0

왜 아파치 access_log를 사용합니까? – hohner

답변

5

달라질 수 있습니다. 무엇을 기록하고 싶습니다. 액세스 로그 일 경우 웹 서버의 로그를 사용해보십시오. 아파치/nginx/IIS 등의 로그는 ZF2 응용 프로그램에서 얻을 수있는 것보다 잘 수행됩니다.

ZF2 응용 프로그램에 로그인해야하는 경우 다음 두 가지 중에서 선택할 수 있습니다. 첫 번째 옵션은 bootstrap입니다. 당신이 사용할 수있는 가장 초기의 옵션 중 하나이기 때문에 아마도 최고입니다. 그러나 route 또는 dispatch을 볼 수도 있습니다. 이 두 이벤트는 응용 프로그램의 "실행"단계에서 호출됩니다. 이 이벤트를 통해 예를 들어 경로 일치를 사용할 수 있으므로 요청이 컨트롤러와 일치하는지 (또는 일치하지 않는 경우 404입니다) 알 수 있습니다 (또는하지 않음).

몇 가지 예입니다. ServiceManagerlogger 키 아래에 로거가 구성되어 있다고 가정 해 보겠습니다. , 당신은 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() 
    )); 
    }); 
    } 
} 
+0

평소대로, 쥬얼리. ;-) –

2

dispatch 이벤트의 수신자를 Zend\Mvc\Application에 연결할 수있는 것 같습니다.

참고로 Rob Allen은 ZF2 events이라는 편리한 목록을 만들었습니다.

+0

굉장한 목록, 링크를 가져 주셔서 감사합니다! –