Mau*_*uro 0 php logging zend-log zend-framework2
我们正在使用zend框架2用于新的应用程序,我想拥有相同的Rails或类似的日志系统,我希望每个请求都有一个日志,可以在Zend中执行此操作吗?
这取决于什么要记录.如果它只是一个访问日志,您应该尝试使用Web服务器的日志.来自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!');
}
}
Run Code Online (Sandbox Code Playgroud)
或者,例如,如果您等待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()
));
});
}
}
Run Code Online (Sandbox Code Playgroud)