Php 在ZF2中记录每个请求
我们正在为一个新的应用程序使用zend framework 2,我希望有相同的Rails或类似的日志系统,我希望每个请求都有一个日志,可以在zend中这样做吗 听起来您可以将侦听器附加到Php 在ZF2中记录每个请求,php,logging,zend-framework2,zend-log,Php,Logging,Zend Framework2,Zend Log,我们正在为一个新的应用程序使用zend framework 2,我希望有相同的Rails或类似的日志系统,我希望每个请求都有一个日志,可以在zend中这样做吗 听起来您可以将侦听器附加到Zend\Mvc\Application上的dispatch事件 Rob Allen创建了一个方便的日志列表供参考。这取决于您要记录的内容。如果它只是一个访问日志,您应该尝试使用Web服务器的日志。来自Apache/nginx/IIS等的日志的性能比您在ZF2应用程序中获得的性能更好 如果需要在ZF2应用程序内部
Zend\Mvc\Application
上的dispatch
事件
Rob Allen创建了一个方便的日志列表供参考。这取决于您要记录的内容。如果它只是一个访问日志,您应该尝试使用Web服务器的日志。来自Apache/nginx/IIS等的日志的性能比您在ZF2应用程序中获得的性能更好
如果需要在ZF2应用程序内部登录,则有两种选择。第一个选项位于bootstrap
。这是您可以使用的最早选项之一,因此可能是最好的。但是,您也可以查看路线
或调度
。在应用程序的“运行”阶段调用这两个事件。对于这些事件,例如,您有一个可用的路由匹配,因此您知道(或不知道)您的请求是否与任何控制器匹配(或者如果您没有匹配,则为404)
一些例子。假设您在logger
键下的ServiceManager
中配置了一个记录器。然后在引导时登录
:
namespace Application;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager();
$logger = $sm->get('logger');
$logger->debug('Log here!');
}
}
或者,如果您等待路由
,则为路由
事件附加侦听器:
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()
));
});
}
}
为什么不使用Apache的访问日志呢?像往常一样棒极了,Jurian.。-)