Documentation

Logs with PHP

Overview

Lumigo supports OpenTelemetry-based instrumentation for PHP applications, enabling you to collect and export trace data for enhanced observability. While Lumigo doesn't provide a dedicated OpenTelemetry distribution for PHP, you can configure your application to send telemetry data to Lumigo using the OpenTelemetry PHP SDK and the appropriate exporters.​

Scope

Logs using OpenTelemtry are currently not auto-instrumented; you must use a logging library that integrates manually with OpenTelemetry. OpenTelemetry has instrumentation available for most of the most commonly used PHP libraries. For a full list, see instrumentation libraries on packagist.

Basics

Instrumentation setup

For instrumentation setup, follow the instructions in the linked article. It provides instructions on manual, vanilla OpenTelemetry instrumentation. Refer to OpenTelemetry's documentation on instrumenting for further details.

Logging with OpenTelemetry

OpenTelemetry logging is not designed for direct, injected use. Instead, it is best integrated into pre-existing libraries. This allows you to choose how many of your logs are sent to any compatible services, such as OpenTelemetry's collector.

To use logging with OpenTelemetry, first create a LoggerProvider:

<?php

use OpenTelemetry\API\Logs\EventLogger;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\Contrib\Otlp\LogsExporter;
use OpenTelemetry\SDK\Common\Export\Stream\StreamTransportFactory;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\Processor\SimpleLogRecordProcessor;
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;

require 'vendor/autoload.php';

$exporter = new LogsExporter(
    (new StreamTransportFactory())->create('php://stdout', 'application/json')
);

$loggerProvider = LoggerProvider::builder()
    ->addLogRecordProcessor(new SimpleLogRecordProcessor($exporter))
    ->setResource(ResourceInfoFactory::emptyResource())
    ->build();

Then, use an EventLogger to make the Logger emit logs:

$logger = $loggerProvider->getLogger('demo', '1.0', 'http://schema.url', [/*attributes*/]);
$eventLogger = new EventLogger($logger, 'my-domain');
$record = (new LogRecord('hello world'))
    ->setSeverityText('INFO')
    ->setAttributes([/*attributes*/]);

$eventLogger->logEvent('foo', $record);

For detailed information on logging errors and warnings with OpenTelemetry, consult the documentation here .