eerzho/opentelemetry-auto-class-symfony

Trace what your Symfony methods received, returned, and threw — without writing a single span.

Maintainers

Package info

github.com/eerzho/opentelemetry-auto-class-symfony

Type:symfony-bundle

pkg:composer/eerzho/opentelemetry-auto-class-symfony

Transparency log

Statistics

Installs: 10

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.5.1 2026-07-20 19:44 UTC

This package is auto-updated.

Last update: 2026-07-20 21:57:45 UTC


README

Version Downloads PHP License

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:

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

  1. During container compilation, scans all service definitions for the #[Trace] attribute
  2. Builds a method map and stores it as a container parameter
  3. On kernel boot, registers ext-opentelemetry hooks 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