Logging
As logging is a mature and well-established function, the OpenTelemetry approach is a little different for this signal.
The OpenTelemetry logger is not designed to be used directly, but rather to be integrated into existing logging libraries as a handler. In this way, you can choose to have some or all of your application logs sent to an OpenTelemetry-compatible service such as the collector.
Setup
You get a logger from a LoggerProvider
. Log records get emitted via an
EventLogger
:
<?php
$loggerProvider = new LoggerProvider(
new SimpleLogsProcessor(
new ConsoleExporter()
)
);
$logger = $loggerProvider->getLogger('demo', '1.0', 'http://schema.url', [/*attributes*/]);
$eventLogger = new EventLogger($logger, 'my-domain');
Once configured, a LogRecord
can be created and sent via the event logger’s
logEvent
method:
$record = (new LogRecord('hello world'))
->setSeverityText('INFO')
->setAttributes([/*attributes*/]);
$eventLogger->logEvent('foo', $record);
Integrations for 3rd-party logging libraries
Monolog
You can use the monolog handler to send monolog logs to an OpenTelemetry-capable receiver:
composer require open-telemetry/opentelemetry-logger-monolog
$loggerProvider = new LoggerProvider(/*params*/);
$handler = new \OpenTelemetry\Contrib\Logs\Monolog\Handler(
$loggerProvider,
\Psr\Log\LogLevel::ERROR,
);
$logger = new \Monolog\Logger('example', [$handler]);
$logger->info('hello, world');
$logger->error('oh no', [
'foo' => 'bar',
'exception' => new \Exception('something went wrong'),
]);
$loggerProvider->shutdown();
Last modified May 5, 2023: php documentation updates (#2654) (614c20f)