2013-01-15 42 views
0

我们正在使用zend框架2为一个新的应用程序,我想有相同的日志系统的Rails或类似的,我想每个请求有一个日志,有可能做到这一点在Zend ?记录每个请求在ZF2

+0

为什么不使用Apache的访问日志? – hohner

回答

5

它取决于什么你想记录。如果它只是一个访问日志,你应该尝试使用Web服务器的日志。来自Apache/nginx/IIS等的日志表现比您在ZF2应用中获得的更好。

如果您需要登录ZF2应用程序,您有两种选择。第一个选项是bootstrap。这是您可以使用的最早的选项之一,所以可能是最好的选择。不过,你也可以看看routedispatch。这两个事件在应用程序的“运行”阶段被调用。通过这些事件,例如可以使用路径匹配,因此如果您的请求与任何控制器匹配(或者如果您没有匹配,则为404),您就知道(或不知道)。

一些例子。假设您在logger密钥下的ServiceManager中配置了一个记录器。然后记录在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() 
    )); 
    }); 
    } 
} 
+0

像往常一样,真棒,真棒。 ;-) –

2

听起来像您可以将听众附加到Zend\Mvc\Application上的dispatch事件。

作为参考,罗布艾伦创建了一个便利的清单ZF2 events

+0

真棒列表,谢谢你的链接! –