我们正在为一个新的应用程序使用 zend 框架 2,我希望有相同的 Rails 或类似的日志系统,我希望每个请求都有一个日志,在 Zend 中可以做到这一点吗?
问问题
1712 次
2 回答
5
这取决于您要记录的内容。如果它只是一个访问日志,你应该尝试使用网络服务器的日志。来自 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()
));
});
}
}
于 2013-01-16T09:33:45.830 回答
2
听起来您可以将侦听器附加dispatch
到Zend\Mvc\Application
.
作为参考,Rob Allen 创建了一个方便的ZF2 事件列表。
于 2013-01-16T06:50:23.967 回答