open-telemetry / context
OpenTelemetry PHP 的上下文实现。
1.1.0beta1
2024-08-21 00:29 UTC
Requires
- php: ^8.1
- symfony/polyfill-php82: ^1.26
Suggests
- ext-ffi: To allow context switching in Fibers
This package is auto-updated.
Last update: 2024-08-26 23:31:42 UTC
README
OpenTelemetry 上下文
不可变执行作用域传播机制,更详细的信息请参阅 opentelemetry-specification。
安装
composer require open-telemetry/context
用法
隐式传播
$context = Context::getCurrent(); // modify context $scope = $context->activate(); try { // run within new context } finally { $scope->detach(); }
建议在调用 ::activate()
后使用 try-finally
语句,以确保创建的作用域被正确地 ::detach()
。
调试作用域
默认情况下,由 ::activate()
创建的作用域在非生产环境中对无效和缺失的 ::detach()
调用发出警告。可以通过将环境变量 OTEL_PHP_DEBUG_SCOPES_DISABLED
设置为真值来禁用此功能。禁用仅建议用于使用 exit
/ die
的应用程序,以防止无法避免的通知。
异步应用程序
纤程支持 - 自动将上下文传播到新创建的纤程
需要 NTS 构建,ext-ffi
,并将环境变量 OTEL_PHP_FIBERS_ENABLED
设置为真值。此外,如果 ffi.enable
设置为 preload
,则对于非 CLI SAPI,必须预加载 vendor/autoload.php
。
事件循环
事件循环必须在回调执行时恢复原始上下文。一个基本的实现可能如下所示,尽管实现应尽可能避免保留对参数的不必要的引用
function bindContext(Closure $closure): Closure { $context = Context::getCurrent(); return static function (mixed ...$args) use ($closure, $context): mixed { $scope = $context->activate(); try { return $closure(...$args); } finally { $scope->detach(); } }; }
贡献
此存储库是只读的 git 子树分割。要贡献,请参阅主要的 OpenTelemetry PHP monorepo。