mymedia / stack-request-id
为 Symfony 请求添加请求 ID 的中间件。
2.1.0
2018-01-19 14:22 UTC
Requires
- ramsey/uuid: ~2.0|~3.0
- symfony/http-foundation: ~2.1|~3.0|~4.0
- symfony/http-kernel: ~2.1|~3.0|~4.0
Requires (Dev)
- phpunit/phpunit: ^4.8
Suggests
- symfony/monolog-bundle: For registering the MonologProcessor
README
为您的 Symfony 请求添加请求 ID 的中间件
安装
首先,将此项目添加到您的项目 composer.json 文件中
$ composer require mymedia/stack-request-id ^2.0
设置
更新您的 app.php
文件以包含中间件
之前
use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel($env, $debug); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
之后
use Feedo\Stack\RequestId; use Feedo\Stack\Uuid4RequestIdGenerator; use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel($env, $debug); // Stack it! $generator = new Uuid4RequestIdGenerator(); $stack = new RequestId($kernel, $generator); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $stack->handle($request); $response->send(); $kernel->terminate($request, $response);
将请求 ID 添加到您的 monolog 日志中
如果您使用 Symfony 的 MonologBundle,您可以通过在 services.xml 文件中添加以下服务定义来将请求 ID 添加到您的 monolog 日志中
<service id="feedo.stack.request_id.monolog_processor" class="Feedo\Stack\RequestId\MonologProcessor"> <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="255" /> <tag name="monolog.processor" /> </service>
将请求 ID 添加到响应中
如果您需要将请求 ID 与响应一起发送,您可以通过启用响应头来实现
$generator = new Uuid4RequestIdGenerator(); $stack = new RequestId($kernel, $generator); $stack->enableResponseHeader();
也可以更改响应头名称
$stack->enableResponseHeader('My-Custom-Request-Id');
如果您无法访问 RequestId
对象实例(例如 StackPHP),则可以通过 RequestId
构造函数的第四个参数设置响应头。
$generator = new Uuid4RequestIdGenerator(); $stack = new RequestId($kernel, $generator, 'X-Request-Id', 'My-Custom-Request-Id');
第三个参数(仅供参考)是头的名称
- 在回退到生成新请求 ID 之前将检查其值。
- 用于在 Symfony 的请求对象中存储生成的请求 ID。
StackPHP 的 Middleware 构建器
如果您已经在使用 StackPHP,只需将 RequestId
类推入构建器中。
$kernel = new AppKernel('dev', true); $generator = new Uuid4RequestIdGenerator(); $stack = (new Stack\Builder) ->push('Feedo\Stack\RequestId', $generator, 'X-Request-Id', 'X-Request-Id') ->resolve($kernel); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $stack->handle($request); $response->send(); $kernel->terminate($request, $response);