open-telemetry / opentelemetry-auto-psr3
OpenTelemetry auto-instrumentation for PSR-3 (Logger Interface).
Requires
- php: ^8.0
- ext-opentelemetry: *
- open-telemetry/api: ^1.0
- open-telemetry/sem-conv: ^1.24
- psr/log: ^1 || ^2 || ^3
Requires (Dev)
- apix/log: *
- cakephp/console: *
- cakephp/log: *
- friendsofphp/php-cs-fixer: ^3
- monolog/monolog: *
- open-telemetry/sdk: ^1.0
- phan/phan: ^5.0
- phpstan/phpstan: ^1.1
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.18.4
- symfony/console: *
- vimeo/psalm: ^5.0
- yiisoft/log: *
README
This is a read-only subtree split of https://github.com/open-telemetry/opentelemetry-php-contrib.
OpenTelemetry PSR-3 auto-instrumentation
Please read https://opentelemetry.io/docs/instrumentation/php/automatic/ for instructions on how to install and configure the extension and SDK.
Overview
Auto-instrumentation hooks are registered via composer, and depending on the mode, will:
- automatically inject trace id and span id into log message context of any psr3 logger; or
- transform the message into the OpenTelemetry LogRecord format, for export to an OpenTelemetry logging-compatible backend
Mode
The package can operate in two modes, controlled by the environment variable OTEL_PHP_PSR3_MODE
:
inject
Inject traceId
and spanId
of the active trace span into the context of each logged message. Depending on the PSR-3 implementation,
the values may be written to the log output, or may be available for interpolation into the log message.
For example:
putenv('OTEL_PHP_PSR3_MODE=inject'); require 'vendor/autoload.php'; $logger = /* create logger */ $logger->info('traceId={traceId} spanId={spanId}');
export
The logged output will be processed and emitted by the logger as normal, but the output will also be encoded using the OpenTelemetry log model and can be exported to an OpenTelemetry-compatible backend.
putenv('OTEL_PHP_PSR3_MODE=export'); putenv('OTEL_PHP_AUTOLOAD_ENABLED=true'); putenv('OTEL_LOGS_EXPORTER=console'); require 'vendor/autoload.php'; $logger = /* create logger */ $logger->info('Hello, OTEL');
Configuration
The extension can be disabled via runtime configuration:
OTEL_PHP_DISABLED_INSTRUMENTATIONS=psr3