digitalrevolution / symfony-trace-bundle
为您的 Symfony 应用程序添加跟踪功能。
Requires
- php: >=8.1
- symfony/config: ^6.3||^7.0
- symfony/dependency-injection: ^6.3||^7.0
- symfony/framework-bundle: ^6.3||^7.0
- symfony/http-foundation: ^6.3||^7.0
- symfony/http-kernel: ^6.3||^7.0
Requires (Dev)
- digitalrevolution/accessorpair-constraint: ^2.1
- digitalrevolution/phpunit-extensions: ^1.2
- digitalrevolution/phpunit-file-coverage-inspection: ^v2.0.0
- digitalrevolution/utils: ^1.9
- phpmd/phpmd: ^2.14
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpstan/phpstan-symfony: ^1.3
- phpunit/phpunit: ^10.4 || ^11.0
- ramsey/uuid: ^4.7
- roave/security-advisories: dev-latest
- sentry/sentry: ^4.2
- squizlabs/php_codesniffer: ^3.7
- symfony/browser-kit: ^6.3||^7.0
- symfony/css-selector: ^6.3||^7.0
- symfony/http-client: ^6.3||^7.0
- symfony/messenger: ^6.3||^7.0
- symfony/monolog-bridge: ^6.3||^7.0
- symfony/monolog-bundle: ^3.10
- symfony/phpunit-bridge: ^6.3||^7.0
- symfony/templating: ^6.3||^7.0
- symfony/twig-bundle: ^6.3||^7.0
- symfony/uid: ^6.3||^7.0
- symfony/yaml: ^6.3||^7.0
- twig/twig: ^3.8.0
Suggests
- ramsey/uuid: Ramsey's UUID generator
- sentry/sentry: Sentry.io integration
- symfony/http-client: Symfony's HTTP client
- symfony/messenger: Symfony's messenger
- symfony/uid: Symfony's UUID generator
README
Symfony Trace Bundle
基于 chrisguitarguy/RequestIdBundle
这将为您的 Symfony 应用程序添加跟踪 ID。为什么?这是一种在日志中添加一些附加信息并向用户展示的好方法。跟踪 ID 将在以下位置可用:
- Monolog 日志消息
- 请求 -> 响应
- 控制台命令
- Twig 扩展
- HttpClient 请求(默认禁用)
- Messenger 消息(默认禁用)
- Sentry 报告(默认禁用)
安装
使用 Composer。
composer require digitalrevolution/symfony-trace-bundle
然后,在您的 /config/bundles.php
中启用此捆绑包
# /config/bundles.php <?php return [ ... DR\SymfonyTraceBundle\SymfonyTraceBundle::class => ['all' => true], ];
配置
默认情况下,该捆绑包将使用 W3C TraceContext 标准来接收和传递 traceId。
有关配置详细信息,请参阅: TraceContext 配置
还可以配置捆绑包以设置自定义请求/响应头和自定义 ID 生成器。
在 /docs 页面上阅读有关可用配置选项的更多信息:TraceId 配置
工作原理
当请求到达时,它会检查包含 traceId 的请求头。如果存在,则该头部的值将在整个捆绑包中使用。这使得您可以使用堆栈中更高位置的 trace ID(如 web 服务器本身)。
如果没有找到 trace ID,则由 TraceIdGeneratorInterface
生成一个。在 tracecontext 模式下,ID 将根据 TraceContext 标准生成。默认生成器在 traceId 模式下创建版本 4 UUID。
在返回过程中,还可以使用上述值在响应上设置响应头。
头部是可配置的。请参阅上面的 配置。内部还会生成一个事务 ID。该 ID 用于标识单个请求。
Monolog 集成
有一个 monolog Processor 会将跟踪 ID 和事务 ID 添加到记录的 extra
数组中。可以通过将配置中的 enable_monolog
设置为 false
来关闭此功能。
要在日志中使用跟踪 ID,请将 %extra.trace_id%
包含在格式化程序中。要在日志中使用事务 ID,请将 %extra.transaction_id%
包含在格式化程序中。以下是从此捆绑包的测试中获取的配置示例。
# /config/services.php $services->set('trace_id_formatter', LineFormatter::class) ->arg('$format', "[%%datetime%%][%%extra.trace_id%%][%%extra.transaction_id%%] %%channel%%.%%level_name%%: %%message%% %%extra%%\n") ->arg('$dateFormat', "Y-m-d\TH:i:s");
# /config/packages/monolog.php $monolog->handler('main') ->type('stream') ->path('%kernel.logs_dir%/error.%kernel.environment%.log') ->level('debug') ->formatter('trace_id_formatter') ->channels()->elements(["!event"]);
Messenger 集成
当启用时,将向消息的 Envelope
中添加分发器进程的完整跟踪数据。在消费者端,将跟踪数据应用于正在运行的消费者进程。一旦处理了 Envelope
,值将重置为消费者进程的原始值(如果有)。
Twig 集成
默认情况下,此捆绑包将为您的 twig 环境添加全局 trace_id
和 transaction_id
函数。要在捆绑包配置中禁用此功能,请将 enable_twig
设置为 false
。
以下是一个模板示例。
<!DOCTYPE html> <html> <head> <title>Hello, World</title> </head> <body> <h1>{{ trace_id() }}</h1> <h2>{{ transaction_id() }}</h2> </body> </html>
HttpClient 集成
默认情况下,此组件将检查带有http_client.trace_id
标签的服务,并使用TraceAwareHttpClient进行装饰。当启用tagDefaultClient
时,默认的symfony http客户端也将被标记并装饰。这将向所有标记客户端的出站请求添加跟踪头。在traceId模式下,可以通过header
配置选项更改头名称。
Sentry集成
当启用时,此组件将向Sentry报告添加trace_id
和transaction_id
标签。
关于我们
在123inkt(Digital Revolution B.V.的一部分),每天都有超过50名开发专业人士在改进我们的内部ERP和我们的几个商店。你想加入我们吗?我们在寻找开发者。