eerzho / opentelemetry-auto-class-symfony
Trace what your Symfony methods received, returned, and threw — without writing a single span.
Package info
github.com/eerzho/opentelemetry-auto-class-symfony
Type:symfony-bundle
pkg:composer/eerzho/opentelemetry-auto-class-symfony
Requires
- php: >=8.2
- ext-opentelemetry: *
- eerzho/opentelemetry-auto-class: v0.5.1
- open-telemetry/api: ^1.0
- symfony/dependency-injection: ^6.0 || ^7.0 || ^8.0
- symfony/http-kernel: ^6.0 || ^7.0 || ^8.0
README
Trace what your Symfony methods received, returned, and threw — without writing a single span.
The Symfony integration for opentelemetry-auto-class — your classes are discovered and registered automatically.
This is a read-only sub-split. Please open issues and pull requests in the monorepo.
Installation
composer require eerzho/opentelemetry-auto-class-symfony
Register the bundle:
// config/bundles.php return [ // ... Eerzho\Instrumentation\Class\Symfony\AutoClassBundle::class => ['all' => true], ];
Requirements:
- ext-opentelemetry
- PHP 8.2+
- Symfony 6+
Usage
Add #[Trace] to any class registered as a service:
namespace App\Service; use Eerzho\Instrumentation\Class\Attribute\Trace; use Eerzho\Instrumentation\Class\Attribute\TraceMethod; use Eerzho\Instrumentation\Class\Attribute\TraceProperties; #[Trace] // mark the class for tracing class OrderService { // span "App\Service\OrderService::pay" #[TraceMethod(exclude: ['card'])] // hide "card" from the span public function pay(int $orderId, string $card, Address $address): void {} public function healthCheck(): bool {} // no #[TraceMethod] -> not traced } #[TraceProperties(exclude: ['zip'])] // expand every prop but zip class Address { public function __construct(public string $city, public string $zip) {} }
All three attributes and their options are fully documented in the core.
How it works
- During container compilation, scans all service definitions for the
#[Trace]attribute - Builds a method map and stores it as a container parameter
- On kernel boot, registers
ext-opentelemetryhooks for matched methods
Only classes registered as services are discovered — a
#[Trace]class that is never wired into the container is not instrumented.
Disabling instrumentation
OTEL_PHP_DISABLED_INSTRUMENTATIONS=class