Logging And Telemetry#

Use TelemetryMiddleware directly when you only need a short one-off setup. Use TelemetryOptions when you want one reusable telemetry profile across kernels, tests, or environment-specific bootstraps.

One-Off Configuration#

use Infocyph\Webrick\Middleware\TelemetryMiddleware;

$kernel = RouterKernel::bootWithRegistrar(
    log: $logger,
    matcher: $matcher,
    register: $register,
    preGlobal: [
        new TelemetryMiddleware(
            $logger,
            addXResponseTime: true,
            emitRequestId: true,
            emitTraceparentHeader: true,
        ),
    ],
);

Prefer this when:

  • the setup is local to one kernel

  • you only need a few non-default flags

Reusable Profile#

use Infocyph\Webrick\Middleware\TelemetryMiddleware;
use Infocyph\Webrick\Support\TelemetryOptions;

$telemetryOptions = new TelemetryOptions(
    log: $logger,
    requestIdHeader: 'Request-Id',
    emitTraceparentHeader: true,
    nelGroup: 'default',
    nelEndpoint: 'https://reports.example.com/nel',
);

$telemetry = TelemetryMiddleware::fromOptions($telemetryOptions);

$kernel = RouterKernel::bootWithRegistrar(
    log: $logger,
    matcher: $matcher,
    register: $register,
    preGlobal: [$telemetry],
);

Prefer this when:

  • the constructor call is getting long

  • you want the same telemetry setup in multiple kernels

  • tests should reuse the exact same config object

Inspecting The Active Profile#

$activeOptions = $telemetry->options();

echo $activeOptions->requestIdHeader; // Request-Id

This is useful when boot code decorates middleware and you want to verify the resolved telemetry profile in tests.