2017-05-23 10 views
1

Zend 표현식 2모든 요청과 응답을 기록하는 방법은 무엇입니까?

모든 입력과 모든 출력이 필요합니다. 내, pipeline.php

$app->pipe(\Zend\Stratigility\Middleware\ErrorHandler::class); 
$app->pipe(\Zend\Expressive\Helper\ServerUrlMiddleware::class); 
$app->pipe(\App\Middleware\LogRequestsMiddleware::class); 
$app->pipeRoutingMiddleware(); 
$app->pipe(\Zend\Expressive\Middleware\ImplicitHeadMiddleware::class); 
$app->pipe(\Zend\Expressive\Middleware\ImplicitOptionsMiddleware::class); 
$app->pipe(\Zend\Expressive\Helper\UrlHelperMiddleware::class); 
$app->pipeDispatchMiddleware(); 
$app->pipe(\App\Middleware\LogResponseMiddleware::class); 
$app->pipe(\Zend\Expressive\Middleware\NotFoundHandler::class); 

LogResponseMiddleware은 실행하지 말아. 오류 인 경우에도 필요합니다.

답변

0

올바른 순서 : 여기

$app->pipe(\App\Middleware\LogResponseMiddleware::class); 
$app->pipe(\Zend\Stratigility\Middleware\ErrorHandler::class); 
$app->pipe(\Zend\Expressive\Helper\ServerUrlMiddleware::class); 
$app->pipeRoutingMiddleware(); 
$app->pipe(\Zend\Expressive\Middleware\ImplicitHeadMiddleware::class); 
$app->pipe(\Zend\Expressive\Middleware\ImplicitOptionsMiddleware::class); 
$app->pipe(\Zend\Expressive\Helper\UrlHelperMiddleware::class); 
$app->pipeDispatchMiddleware(); 
$app->pipe(\App\Middleware\LogRequestsMiddleware::class); 
$app->pipe(\Zend\Expressive\Middleware\NotFoundHandler::class); 

세부 사항 : https://framework.zend.com/blog/2017-03-15-nested-middleware-in-expressive.html

당신은 단지 미들웨어 생성 요청과 매우 쉽게 응답을 로그인 할 수 있습니다
0

:

<?php 
namespace Acme\Middleware; 

use Psr\Log\LoggerInterface; 
use Interop\Http\ServerMiddleware\DelegateInterface; 
use Interop\Http\ServerMiddleware\MiddlewareInterface; 
use Psr\Http\Message\ResponseInterface; 
use Psr\Http\Message\ServerRequestInterface; 

class LoggingMiddleware implements MiddlewareInterface 
{ 
    /** 
    * @var Psr\Log\LoggerInterface $logger 
    */ 
    private $logger; 

    public function __construct(LoggerInterface $logger) 
    { 
     $this->logger = $logger; 
    } 

    public function process(ServerRequestInterface $request, DelegateInterface $delegate) { 
     // log the request 
     $this->logger->log(Logger::INFO, 'Request', []); 

     $response = $delegate->process($request); 

     // log the response 
     $this->logger->log(Logger::INFO, 'Response', []); 

     return $response; 
    } 
} 

당신의 공장에서 사용할 수를 모든 PSR 기록 장치 (예 :

)
<?php 
namespace Acme\Middleware; 

use Interop\Container\ContainerInterface; 
use Psr\Log\LoggerInterface; 

class LoggingMiddlewareFactory 
{ 
    public function __invoke(ContainerInterface $container) 
    { 
     $logger = $container->get(LoggerInterface::class); 

     return new LoggingMiddleware($logger); 
    } 
} 

마지막으로, 로깅 미들웨어는 정확히 ServerUrlMiddleware 후 파이프에 추가해야합니다 : 그거야

<?php 
// config/pipeline.php 
$app->pipe(ErrorHandler::class); 
$app->pipe(ServerUrlMiddleware::class); 

$app->pipe(LoggingMiddleware::class); 

합니다.