Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在ZF2中记录每个请求_Php_Logging_Zend Framework2_Zend Log - Fatal编程技术网

Php 在ZF2中记录每个请求

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 framework 2,我希望有相同的Rails或类似的日志系统,我希望每个请求都有一个日志,可以在zend中这样做吗

听起来您可以将侦听器附加到
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.。-)