open-telemetry/context
Immutable, execution-scoped context propagation for PHP based on the OpenTelemetry specification. Activate contexts with scopes and detach them safely, with optional fiber support and guidance for event loops.
Immutable execution scoped propagation mechanism, for further details see opentelemetry-specification.
composer require open-telemetry/context
$context = Context::getCurrent();
// modify context
$scope = $context->activate();
try {
// run within new context
} finally {
$scope->detach();
}
It is recommended to use a try-finally statement after ::activate() to ensure that the created scope is properly ::detach()ed.
By default, scopes created by ::activate() warn on invalid and missing calls to ::detach() in non-production
environments. This feature can be disabled by setting the environment variable OTEL_PHP_DEBUG_SCOPES_DISABLED to a
truthy value. Disabling is only recommended for applications using exit / die to prevent unavoidable notices.
Requires an NTS build, ext-ffi, and setting the environment variable OTEL_PHP_FIBERS_ENABLED to a truthy value. Additionally vendor/autoload.php has to be preloaded for non-CLI SAPIs if ffi.enable is set to preload.
Event loops have to restore the original context on callback execution. A basic implementation could look like the following, though implementations should avoid keeping unnecessary references to arguments if possible:
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();
}
};
}
This repository is a read-only git subtree split. To contribute, please see the main OpenTelemetry PHP monorepo.
How can I help you explore Laravel packages today?