Merge branch '2.x' into spi-span-processors

This commit is contained in:
Brett McBride 2025-08-06 20:59:36 +10:00
commit ab583e08f3
45 changed files with 121 additions and 677 deletions

View File

@ -42,6 +42,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
with:
sarif_file: results.sarif

View File

@ -6,6 +6,9 @@ on:
pull_request:
branches: [ main, 1.x, 2.x ]
permissions:
contents: read
jobs:
php:
runs-on: ubuntu-latest

View File

@ -6,14 +6,14 @@ on:
- "main"
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
jobs:
documentation:
permissions:
pages: write # required for GitHub Pages deployment
id-token: write # required for GitHub Pages deployment
name: "Documentation"
runs-on: "ubuntu-latest"
steps:

View File

@ -11,12 +11,14 @@ on:
paths:
- docker/Dockerfile
- .github/workflows/publish-otel-php-base-docker-image.yml
permissions:
contents: read
jobs:
push_to_registry:
name: OpenTelemetry PHP base docker image creation
strategy:
matrix:
php-version: ['8.0', '8.1', '8.2', '8.3', '8.4']
php-version: ['8.1', '8.2', '8.3', '8.4']
runs-on: ubuntu-latest
permissions:
packages: write
@ -45,7 +47,6 @@ jobs:
file: docker/Dockerfile
build-args: PHP_VERSION=${{ matrix.php-version }}
platforms: linux/amd64,linux/arm/v8,linux/arm64
tags: ghcr.io/open-telemetry/opentelemetry-php/opentelemetry-php-base:${{ matrix.php-version }}
- name: Build and push ${{ matrix.php-version }} to ghcr.io
uses: docker/build-push-action@v6

View File

@ -6,6 +6,9 @@ on:
pull_request:
branches: [ main, 1.x, 2.x ]
permissions:
contents: read
jobs:
shellcheck:
runs-on: ubuntu-latest

View File

@ -9,6 +9,9 @@ on:
create:
workflow_dispatch:
permissions:
contents: read
jobs:
gitsplit:
runs-on: ubuntu-latest

View File

@ -291,13 +291,13 @@ For more information about the triager role, see the [community repository](http
## Emeritus maintainers/approvers/triagers
- [Timo Michna](https://github.com/tidal/)
- [Amber Zsistla](https://github.com/zsistla)
- [Beniamin Calota](https://github.com/beniamin)
- [Fahmy Mohammed](https://github.com/Fahmy-Mohammed)
- [Levi Morrison](https://github.com/morrisonlevi)
- [Amber Zsistla](https://github.com/zsistla)
- [Jodee Varney](https://github.com/jodeev)
- [Przemek Delewski](https://github.com/pdelewski), Sumo Logic
- [Levi Morrison](https://github.com/morrisonlevi)
- [Przemek Delewski](https://github.com/pdelewski)
- [Timo Michna](https://github.com/tidal/)
For more information about the emeritus role, see the [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#emeritus-maintainerapprovertriager).

View File

@ -1,43 +1,45 @@
ARG PHP_VERSION=8.0
FROM php:8.0.30-cli-alpine AS php-8.0-cli-alpine
FROM php:8.1.32-cli-alpine AS php-8.1-cli-alpine
FROM php:8.2.28-cli-alpine AS php-8.2-cli-alpine
FROM php:8.3.20-cli-alpine AS php-8.3-cli-alpine
FROM php:8.4.8-cli-alpine AS php-8.4-cli-alpine
FROM php-${PHP_VERSION}-cli-alpine
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions \
&& apk add binutils \
&& install-php-extensions \
@composer \
ast \
grpc \
intl\
opcache \
opentelemetry \
pcntl \
protobuf \
sockets \
xdebug \
zip \
&& find /usr/local/lib/php/extensions -name "*.so" -exec strip --strip-debug {} \;
RUN echo "grpc.enable_fork_support = 1" > $(php-config --ini-dir)/grpc.ini \
&& echo "grpc.poll_strategy = epoll1" >> $(php-config --ini-dir)/grpc.ini
FROM composer:2 AS composer
FROM debian:bullseye
WORKDIR /usr/src/myapp
RUN apk add --no-cache bash git; \
find /usr/local/lib/php/extensions -type d -exec chmod +x -R {} \;; \
addgroup -g "1000" -S php; \
adduser --system \
--gecos "" \
--ingroup "php" \
--uid "1000" \
"php";
RUN apt-get update \
&& apt-get install -y --no-install-recommends git wget gnupg2 \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd --gid 1000 php \
&& useradd --system --uid 1000 --gid php --shell /bin/bash --create-home php
RUN apt-get update && apt-get install -y lsb-release apt-transport-https ca-certificates \
&& echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list \
&& wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - \
&& apt-get update
ARG PHP_VERSION=8.3
RUN apt-get install -y \
php${PHP_VERSION}-ast \
php${PHP_VERSION}-cli \
php${PHP_VERSION}-curl \
php${PHP_VERSION}-dev \
php${PHP_VERSION}-grpc \
php${PHP_VERSION}-intl \
php${PHP_VERSION}-mbstring \
php${PHP_VERSION}-opcache \
php${PHP_VERSION}-opentelemetry \
php${PHP_VERSION}-protobuf \
php${PHP_VERSION}-simplexml \
php${PHP_VERSION}-sockets \
php${PHP_VERSION}-xdebug \
php${PHP_VERSION}-zip \
php${PHP_VERSION}-mongodb \
php${PHP_VERSION}-amqp \
php${PHP_VERSION}-rdkafka \
php${PHP_VERSION}-mysqli \
unzip
COPY --from=composer /usr/bin/composer /usr/local/bin/composer
RUN echo ";grpc.enable_fork_support = 1" > $(php-config --ini-dir)/40-otel-dev.ini \
&& echo "grpc.poll_strategy = epoll1" >> $(php-config --ini-dir)/40-otel-dev.ini \
&& echo "zend.assertions = 1" >> $(php-config --ini-dir)/40-otel-dev.ini
USER php

View File

@ -4,12 +4,12 @@ declare(strict_types=1);
namespace OpenTelemetry\Example;
use OpenTelemetry\API\Logs\LogRecord;
putenv('OTEL_PHP_AUTOLOAD_ENABLED=true');
putenv('OTEL_TRACES_EXPORTER=otlp');
putenv('OTEL_METRICS_EXPORTER=otlp');
putenv('OTEL_LOGS_EXPORTER=otlp');
putenv('OTEL_EXPORTER_OTLP_PROTOCOL=grpc');
putenv('OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317');
putenv('OTEL_TRACES_EXPORTER=console');
putenv('OTEL_METRICS_EXPORTER=console');
putenv('OTEL_LOGS_EXPORTER=console');
putenv('OTEL_PROPAGATORS=b3,baggage,tracecontext');
echo 'autoloading SDK example starting...' . PHP_EOL;
@ -21,6 +21,6 @@ $instrumentation = new \OpenTelemetry\API\Instrumentation\CachedInstrumentation(
$instrumentation->tracer()->spanBuilder('root')->startSpan()->end();
$instrumentation->meter()->createCounter('cnt')->add(1);
$instrumentation->eventLogger()->emit('foo', 'hello, otel');
$instrumentation->logger()->emit((new LogRecord('hello, otel'))->setEventName('foo'));
echo 'Finished!' . PHP_EOL;

View File

@ -2,6 +2,7 @@
declare(strict_types=1);
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\Config\SDK\Configuration;
require __DIR__ . '/../vendor/autoload.php';
@ -16,13 +17,13 @@ $sdk = $config
$tracer = $sdk->getTracerProvider()->getTracer('demo');
$meter = $sdk->getMeterProvider()->getMeter('demo');
$eventLogger = $sdk->getEventLoggerProvider()->getEventLogger('demo');
$logger = $sdk->getLoggerProvider()->getLogger('demo');
$span = $tracer->spanBuilder('root')->startSpan();
$scope = $span->activate();
$meter->createCounter('cnt')->add(1);
$eventLogger->emit('foo', 'hello, otel');
$logger->emit((new LogRecord('hello, otel'))->setEventName('foo'));
$scope->detach();
$span->end();

View File

@ -2,6 +2,7 @@
declare(strict_types=1);
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\Config\SDK\Configuration;
require __DIR__ . '/../vendor/autoload.php';
@ -21,10 +22,10 @@ $sdk = $config
$tracer = $sdk->getTracerProvider()->getTracer('demo');
$meter = $sdk->getMeterProvider()->getMeter('demo');
$eventLogger = $sdk->getEventLoggerProvider()->getEventLogger('demo');
$logger = $sdk->getLoggerProvider()->getLogger('demo');
$tracer->spanBuilder('root')->startSpan()->end();
$meter->createCounter('cnt')->add(1);
$eventLogger->emit('foo', 'hello, otel');
$logger->emit((new LogRecord('hello, otel'))->setEventName('foo'));
echo 'Finished!' . PHP_EOL;

View File

@ -5,13 +5,13 @@ declare(strict_types=1);
namespace OpenTelemetry\Example;
use OpenTelemetry\API\Common\Time\Clock;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\API\Signals;
use OpenTelemetry\Contrib\Grpc\GrpcTransportFactory;
use OpenTelemetry\Contrib\Otlp\LogsExporter;
use OpenTelemetry\Contrib\Otlp\OtlpUtil;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\LogRecordLimitsBuilder;
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
@ -29,18 +29,9 @@ $loggerProvider = new LoggerProvider(
(new LogRecordLimitsBuilder())->build()->getAttributeFactory()
)
);
$eventLoggerProvider = new EventLoggerProvider($loggerProvider);
$eventLogger = $eventLoggerProvider->getEventLogger('demo', '1.0', 'http://schema.url', ['foo' => 'bar']);
$logger = $loggerProvider->getLogger('demo', '1.0', 'http://schema.url', ['foo' => 'bar']);
$eventLogger->emit(
name: 'foo',
body: ['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world'],
severityNumber: Severity::INFO
);
$eventLogger->emit(
'bar',
'otel is great'
);
$logger->emit((new LogRecord(['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world']))->setEventName('foo')->setSeverityNumber(Severity::INFO));
$logger->emit((new LogRecord('otel is great'))->setEventName('bar'));
$loggerProvider->shutdown();

View File

@ -9,7 +9,6 @@ use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\Contrib\Otlp\LogsExporter;
use OpenTelemetry\SDK\Common\Export\Http\PsrTransportFactory;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\LogRecordLimitsBuilder;
use OpenTelemetry\SDK\Logs\Processor\SimpleLogRecordProcessor;
@ -27,12 +26,10 @@ $loggerProvider = new LoggerProvider(
(new LogRecordLimitsBuilder())->build()->getAttributeFactory()
)
);
$eventLoggerProvider = new EventLoggerProvider($loggerProvider);
$eventLogger = $eventLoggerProvider->getEventLogger('demo', '1.0', 'https://opentelemetry.io/schemas/1.7.1', ['foo' => 'bar']);
$eventLogger->emit(
name: 'foo',
body: ['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world'],
timestamp: (new \DateTime())->getTimestamp() * LogRecord::NANOS_PER_SECOND,
severityNumber: Severity::INFO,
$logger = $loggerProvider->getLogger('demo', '1.0', 'https://opentelemetry.io/schemas/1.7.1', ['foo' => 'bar']);
$logger->emit(
(new LogRecord(['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world']))
->setEventName('foo')
->setSeverityNumber(Severity::INFO)
->setTimestamp((new \DateTime())->getTimestamp() * LogRecord::NANOS_PER_SECOND)
);

View File

@ -5,11 +5,10 @@ declare(strict_types=1);
namespace OpenTelemetry\Example;
use OpenTelemetry\API\Common\Time\Clock;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
use OpenTelemetry\SDK\Logs\EventLogger;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\Exporter\ConsoleExporterFactory;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\Processor\BatchLogRecordProcessor;
@ -23,16 +22,15 @@ $loggerProvider = new LoggerProvider(
),
new InstrumentationScopeFactory(Attributes::factory())
);
$eventLoggerProvider = new EventLoggerProvider($loggerProvider);
//get a logger, and emit a log record from an EventLogger.
$eventLoggerOne = $eventLoggerProvider->getEventLogger('demo', '1.0');
$eventLoggerTwo = $eventLoggerProvider->getEventLogger('demo', '2.0');
//get a logger, and emit an event.
$loggerOne = $loggerProvider->getLogger('demo', '1.0');
$loggerTwo = $loggerProvider->getLogger('demo', '2.0');
$payload = ['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world'];
$eventLoggerOne->emit(name: 'foo', body: $payload, severityNumber: Severity::INFO);
$eventLoggerOne->emit('bar', 'hello world');
$eventLoggerTwo->emit(name: 'foo', body: $payload, severityNumber: Severity::INFO);
$loggerOne->emit((new LogRecord($payload))->setEventName('foo')->setSeverityNumber(Severity::INFO));
$loggerOne->emit((new LogRecord('hello world'))->setEventName('bar'));
$loggerTwo->emit((new LogRecord($payload))->setEventName('foo')->setSeverityNumber(Severity::INFO));
//shut down logger provider
$loggerProvider->shutdown();

View File

@ -2,10 +2,10 @@
declare(strict_types=1);
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\Exporter\ConsoleExporterFactory;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\Processor\SimpleLogRecordProcessor;
@ -26,7 +26,6 @@ $loggerProvider = new LoggerProvider(
),
new InstrumentationScopeFactory(Attributes::factory())
);
$eventLoggerProvider = new EventLoggerProvider($loggerProvider);
$tracerProvider = new TracerProvider();
$tracer = $tracerProvider->getTracer('demo-tracer');
@ -36,12 +35,12 @@ $scope = $span->activate();
echo 'Trace id: ' . $span->getContext()->getTraceId() . PHP_EOL;
echo 'Span id: ' . $span->getContext()->getSpanId() . PHP_EOL;
//get an event logger, and emit an event. The active context (trace id + span id) will be
//get a logger, and emit an event. The active context (trace id + span id) will be
//attached to the log record
$eventLogger = $eventLoggerProvider->getEventLogger('demo', '1.0', 'http://schema.url', ['foo' => 'bar']);
$logger = $loggerProvider->getLogger('demo', '1.0', 'http://schema.url', ['foo' => 'bar']);
$payload = ['foo' => 'bar', 'baz' => 'bat', 'msg' => 'hello world'];
$eventLogger->emit(name: 'foo', body: $payload, severityNumber: Severity::INFO);
$logger->emit((new LogRecord($payload))->setEventName('foo')->setSeverityNumber(Severity::INFO));
//end span
$span->end();

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace OpenTelemetry\Example;
use OpenTelemetry\API\Instrumentation\CachedInstrumentation;
use OpenTelemetry\API\Logs\LogRecord;
putenv('OTEL_PHP_AUTOLOAD_ENABLED=true');
putenv('OTEL_TRACES_EXPORTER=otlp/stdout');
@ -17,7 +18,7 @@ $instrumentation = new CachedInstrumentation('demo');
$instrumentation->tracer()->spanBuilder('root')->startSpan()->end();
$instrumentation->meter()->createCounter('cnt')->add(1);
$instrumentation->eventLogger()->emit('foo', 'hello, otel');
$instrumentation->logger()->emit(new LogRecord('foo'));
echo PHP_EOL . 'OTLP/stdout autoload example complete!';
echo PHP_EOL;

View File

@ -9,7 +9,6 @@ use Closure;
use OpenTelemetry\API\Behavior\LogsMessagesTrait;
use OpenTelemetry\API\Instrumentation\Configurator;
use OpenTelemetry\API\Instrumentation\ContextKeys;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Metrics\MeterProviderInterface;
use OpenTelemetry\API\Trace\TracerProviderInterface;
@ -33,7 +32,6 @@ final class Globals
private readonly TracerProviderInterface $tracerProvider,
private readonly MeterProviderInterface $meterProvider,
private readonly LoggerProviderInterface $loggerProvider,
private readonly EventLoggerProviderInterface $eventLoggerProvider,
private readonly TextMapPropagatorInterface $propagator,
) {
}
@ -58,15 +56,6 @@ final class Globals
return Context::getCurrent()->get(ContextKeys::loggerProvider()) ?? self::globals()->loggerProvider;
}
/**
* @deprecated
* @phan-suppress PhanDeprecatedFunction
*/
public static function eventLoggerProvider(): EventLoggerProviderInterface
{
return Context::getCurrent()->get(ContextKeys::eventLoggerProvider()) ?? self::globals()->eventLoggerProvider;
}
/**
* @param Closure(Configurator): Configurator $initializer
*
@ -108,11 +97,10 @@ final class Globals
$meterProvider = $context->get(ContextKeys::meterProvider());
$propagator = $context->get(ContextKeys::propagator());
$loggerProvider = $context->get(ContextKeys::loggerProvider());
$eventLoggerProvider = $context->get(ContextKeys::eventLoggerProvider());
assert(isset($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator));
assert(isset($tracerProvider, $meterProvider, $loggerProvider, $propagator));
return self::$globals = new self($tracerProvider, $meterProvider, $loggerProvider, $eventLoggerProvider, $propagator);
return self::$globals = new self($tracerProvider, $meterProvider, $loggerProvider, $propagator);
}
/**

View File

@ -5,8 +5,6 @@ declare(strict_types=1);
namespace OpenTelemetry\API\Instrumentation;
use OpenTelemetry\API\Globals;
use OpenTelemetry\API\Logs\EventLoggerInterface;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Metrics\MeterInterface;
@ -31,8 +29,6 @@ final class CachedInstrumentation
private WeakMap $meters;
/** @var WeakMap<LoggerProviderInterface, LoggerInterface> */
private WeakMap $loggers;
/** @var WeakMap<EventLoggerProviderInterface, EventLoggerInterface> */
private WeakMap $eventLoggers;
/**
* @psalm-suppress PropertyTypeCoercion
@ -46,7 +42,6 @@ final class CachedInstrumentation
$this->tracers = new \WeakMap();
$this->meters = new \WeakMap();
$this->loggers = new \WeakMap();
$this->eventLoggers = new \WeakMap();
}
public function tracer(): TracerInterface
@ -68,15 +63,4 @@ final class CachedInstrumentation
return $this->loggers[$loggerProvider] ??= $loggerProvider->getLogger($this->name, $this->version, $this->schemaUrl, $this->attributes);
}
/**
* @deprecated
* @phan-suppress PhanDeprecatedFunction
*/
public function eventLogger(): EventLoggerInterface
{
$eventLoggerProvider = Globals::eventLoggerProvider();
return $this->eventLoggers[$eventLoggerProvider] ??= $eventLoggerProvider->getEventLogger($this->name, $this->version, $this->schemaUrl, $this->attributes);
}
}

View File

@ -4,9 +4,7 @@ declare(strict_types=1);
namespace OpenTelemetry\API\Instrumentation;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Logs\NoopEventLoggerProvider;
use OpenTelemetry\API\Logs\NoopLoggerProvider;
use OpenTelemetry\API\Metrics\MeterProviderInterface;
use OpenTelemetry\API\Metrics\Noop\NoopMeterProvider;
@ -30,7 +28,6 @@ final class Configurator implements ImplicitContextKeyedInterface
private ?MeterProviderInterface $meterProvider = null;
private ?TextMapPropagatorInterface $propagator = null;
private ?LoggerProviderInterface $loggerProvider = null;
private ?EventLoggerProviderInterface $eventLoggerProvider = null;
private function __construct()
{
@ -55,7 +52,6 @@ final class Configurator implements ImplicitContextKeyedInterface
->withMeterProvider(new NoopMeterProvider())
->withPropagator(new NoopTextMapPropagator())
->withLoggerProvider(NoopLoggerProvider::getInstance())
->withEventLoggerProvider(new NoopEventLoggerProvider())
;
}
@ -83,9 +79,6 @@ final class Configurator implements ImplicitContextKeyedInterface
if ($this->loggerProvider !== null) {
$context = $context->with(ContextKeys::loggerProvider(), $this->loggerProvider);
}
if ($this->eventLoggerProvider !== null) {
$context = $context->with(ContextKeys::eventLoggerProvider(), $this->eventLoggerProvider);
}
return $context;
}
@ -121,15 +114,4 @@ final class Configurator implements ImplicitContextKeyedInterface
return $self;
}
/**
* @deprecated
*/
public function withEventLoggerProvider(?EventLoggerProviderInterface $eventLoggerProvider): Configurator
{
$self = clone $this;
$self->eventLoggerProvider = $eventLoggerProvider;
return $self;
}
}

View File

@ -4,7 +4,6 @@ declare(strict_types=1);
namespace OpenTelemetry\API\Instrumentation;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Metrics\MeterProviderInterface;
use OpenTelemetry\API\Trace\TracerProviderInterface;
@ -56,15 +55,4 @@ final class ContextKeys
return $instance ??= Context::createKey(LoggerProviderInterface::class);
}
/**
* @deprecated
* @return ContextKeyInterface<EventLoggerProviderInterface>
*/
public static function eventLoggerProvider(): ContextKeyInterface
{
static $instance;
return $instance ??= Context::createKey(EventLoggerProviderInterface::class);
}
}

View File

@ -1,23 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Logs;
use OpenTelemetry\Context\ContextInterface;
/**
* @deprecated
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/event-api.md#events-api-interface
*/
interface EventLoggerInterface
{
public function emit(
string $name,
mixed $body = null,
?int $timestamp = null,
?ContextInterface $context = null,
?Severity $severityNumber = null,
iterable $attributes = [],
): void;
}

View File

@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Logs;
/**
* @deprecated
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.32.0/specification/logs/event-api.md#get-an-eventlogger
*/
interface EventLoggerProviderInterface
{
public function getEventLogger(
string $name,
?string $version = null,
?string $schemaUrl = null,
iterable $attributes = [],
): EventLoggerInterface;
}

View File

@ -1,25 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Logs;
use OpenTelemetry\Context\ContextInterface;
/**
* @phan-suppress PhanDeprecatedInterface
*/
class NoopEventLogger implements EventLoggerInterface
{
public static function instance(): self
{
static $instance;
$instance ??= new self();
return $instance;
}
public function emit(string $name, mixed $body = null, ?int $timestamp = null, ?ContextInterface $context = null, Severity|int|null $severityNumber = null, iterable $attributes = []): void
{
}
}

View File

@ -1,27 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\API\Logs;
/**
* @phan-suppress PhanDeprecatedInterface
*/
class NoopEventLoggerProvider implements EventLoggerProviderInterface
{
public static function getInstance(): self
{
static $instance;
return $instance ??= new self();
}
public function getEventLogger(
string $name,
?string $version = null,
?string $schemaUrl = null,
iterable $attributes = [],
): EventLoggerInterface {
return NoopEventLogger::instance();
}
}

View File

@ -17,7 +17,6 @@ use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Instrumentation\InstrumentationScopeFactory;
use OpenTelemetry\SDK\Common\InstrumentationScope\Configurator;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\LoggerConfig;
use OpenTelemetry\SDK\Logs\LoggerProvider;
use OpenTelemetry\SDK\Logs\LogRecordProcessorInterface;
@ -365,7 +364,6 @@ final class OpenTelemetrySdk implements ComponentProvider
resource: $resource,
configurator: $configurator,
);
$eventLoggerProvider = new EventLoggerProvider($loggerProvider);
// </editor-fold>
@ -400,7 +398,6 @@ final class OpenTelemetrySdk implements ComponentProvider
$sdkBuilder->setTracerProvider($tracerProvider);
$sdkBuilder->setMeterProvider($meterProvider);
$sdkBuilder->setLoggerProvider($loggerProvider);
$sdkBuilder->setEventLoggerProvider($eventLoggerProvider);
return $sdkBuilder;
}

View File

@ -78,6 +78,10 @@ class LogsConverter
private function convertLogRecord(ReadableLogRecord $record): LogRecord
{
$pLogRecord = new LogRecord();
$eventName = $record->getEventName();
if ($eventName !== null) {
$pLogRecord->setEventName($eventName);
}
$pLogRecord->setBody(AttributesConverter::convertAnyValue($record->getBody()));
$pLogRecord->setTimeUnixNano($record->getTimestamp() ?? 0);
$pLogRecord->setObservedTimeUnixNano($record->getObservedTimestamp() ?? 0);

View File

@ -19,7 +19,7 @@
"require": {
"php": "^8.2",
"php-http/discovery": "^1.14",
"open-telemetry/gen-otlp-protobuf": "^1.1",
"open-telemetry/gen-otlp-protobuf": "^1.5",
"open-telemetry/api": "^1.0|^2.0",
"open-telemetry/sdk": "^1.0|^2.0",
"tbachert/spi": "^1.0.1"

View File

@ -1,52 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Logs;
use OpenTelemetry\API\Common\Time\ClockInterface;
use OpenTelemetry\API\Logs\EventLoggerInterface;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Context\ContextInterface;
/**
* @deprecated
* @phan-suppress PhanDeprecatedInterface
*/
class EventLogger implements EventLoggerInterface
{
/**
* @internal
*/
public function __construct(
private readonly LoggerInterface $logger,
private readonly ClockInterface $clock,
) {
}
/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.32.0/specification/logs/event-sdk.md#emit-event
*/
public function emit(
string $name,
mixed $body = null,
?int $timestamp = null,
?ContextInterface $context = null,
?Severity $severityNumber = null,
iterable $attributes = [],
): void {
$logRecord = new LogRecord();
$logRecord->setAttribute('event.name', $name);
$logRecord->setAttributes($attributes);
$logRecord->setAttribute('event.name', $name);
$logRecord->setBody($body);
$logRecord->setTimestamp($timestamp ?? $this->clock->now());
$logRecord->setContext($context ?? Context::getCurrent());
$logRecord->setSeverityNumber($severityNumber ?? Severity::INFO);
$this->logger->emit($logRecord);
}
}

View File

@ -1,34 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Logs;
use OpenTelemetry\API\Common\Time\Clock;
use OpenTelemetry\API\Logs\EventLoggerInterface;
/**
* @phan-suppress PhanDeprecatedInterface
*/
class EventLoggerProvider implements EventLoggerProviderInterface
{
public function __construct(private readonly LoggerProviderInterface $loggerProvider)
{
}
/**
* @phan-suppress PhanDeprecatedClass
*/
public function getEventLogger(string $name, ?string $version = null, ?string $schemaUrl = null, iterable $attributes = []): EventLoggerInterface
{
return new EventLogger(
$this->loggerProvider->getLogger($name, $version, $schemaUrl, $attributes),
Clock::getDefault(),
);
}
public function forceFlush(): bool
{
return $this->loggerProvider->forceFlush();
}
}

View File

@ -1,22 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Logs;
use OpenTelemetry\SDK\Sdk;
/**
* @deprecated
*/
class EventLoggerProviderFactory
{
public function create(LoggerProviderInterface $loggerProvider): EventLoggerProviderInterface
{
if (Sdk::isDisabled()) {
return NoopEventLoggerProvider::getInstance();
}
return new EventLoggerProvider($loggerProvider);
}
}

View File

@ -1,15 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Logs;
use OpenTelemetry\API\Logs as API;
/**
* @phan-suppress PhanDeprecatedInterface
*/
interface EventLoggerProviderInterface extends API\EventLoggerProviderInterface
{
public function forceFlush(): bool;
}

View File

@ -68,6 +68,7 @@ class ConsoleExporter implements LogRecordExporterInterface
'severity_number' => $record->getSeverityNumber(),
'severity_text' => $record->getSeverityText(),
'body' => $record->getBody(),
'event_name' => $record->getEventName(),
'trace_id' => $spanContext !== null ? $spanContext->getTraceId() : '',
'span_id' => $spanContext !== null ? $spanContext->getSpanId() : '',
'trace_flags' => $spanContext !== null ? $spanContext->getTraceFlags() : null,

View File

@ -1,25 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\SDK\Logs;
use OpenTelemetry\API\Logs as API;
/**
* @phan-suppress PhanDeprecatedInterface
*/
class NoopEventLoggerProvider extends API\NoopEventLoggerProvider implements EventLoggerProviderInterface
{
public static function getInstance(): self
{
static $instance;
return $instance ??= new self();
}
public function forceFlush(): bool
{
return true;
}
}

View File

@ -4,7 +4,6 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Metrics\MeterProviderInterface;
use OpenTelemetry\API\Trace\TracerProviderInterface;
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
@ -20,7 +19,6 @@ class Sdk
private readonly TracerProviderInterface $tracerProvider,
private readonly MeterProviderInterface $meterProvider,
private readonly LoggerProviderInterface $loggerProvider,
private readonly EventLoggerProviderInterface $eventLoggerProvider,
private readonly TextMapPropagatorInterface $propagator,
) {
}
@ -60,14 +58,6 @@ class Sdk
return $this->loggerProvider;
}
/**
* @deprecated
*/
public function getEventLoggerProvider(): EventLoggerProviderInterface
{
return $this->eventLoggerProvider;
}
public function getPropagator(): TextMapPropagatorInterface
{
return $this->propagator;

View File

@ -34,7 +34,6 @@ use OpenTelemetry\SDK\Common\Configuration\EnvComponentLoaderRegistry;
use OpenTelemetry\SDK\Common\Configuration\EnvResolver;
use OpenTelemetry\SDK\Common\Configuration\Variables;
use OpenTelemetry\SDK\Common\Util\ShutdownHandler;
use OpenTelemetry\SDK\Logs\EventLoggerProviderFactory;
use OpenTelemetry\SDK\Logs\LoggerProviderFactory;
use OpenTelemetry\SDK\Metrics\MeterProviderFactory;
use OpenTelemetry\SDK\Propagation\LateBindingTextMapPropagator;
@ -102,8 +101,7 @@ class SdkAutoloader
->setSampler((new SamplerFactory())->create())
->build();
$loggerProvider = (new LoggerProviderFactory())->create($meterProvider);
$eventLoggerProvider = (new EventLoggerProviderFactory())->create($loggerProvider);
$loggerProvider = (new LoggerProviderFactory())->create($meterProvider, $resource);
ShutdownHandler::register($tracerProvider->shutdown(...));
ShutdownHandler::register($meterProvider->shutdown(...));
@ -113,7 +111,6 @@ class SdkAutoloader
->withTracerProvider($tracerProvider)
->withMeterProvider($meterProvider)
->withLoggerProvider($loggerProvider)
->withEventLoggerProvider($eventLoggerProvider)
->withPropagator($propagator)
;
}
@ -143,7 +140,6 @@ class SdkAutoloader
->withMeterProvider($sdk->getMeterProvider())
->withLoggerProvider($sdk->getLoggerProvider())
->withPropagator($sdk->getPropagator())
->withEventLoggerProvider($sdk->getEventLoggerProvider())
;
}

View File

@ -5,8 +5,6 @@ declare(strict_types=1);
namespace OpenTelemetry\SDK;
use OpenTelemetry\API\Instrumentation\Configurator;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\NoopEventLoggerProvider;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Context\Propagation\NoopTextMapPropagator;
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
@ -24,7 +22,6 @@ class SdkBuilder
private ?TracerProviderInterface $tracerProvider = null;
private ?MeterProviderInterface $meterProvider = null;
private ?LoggerProviderInterface $loggerProvider = null;
private ?EventLoggerProviderInterface $eventLoggerProvider = null;
private ?TextMapPropagatorInterface $propagator = null;
private bool $autoShutdown = false;
@ -59,16 +56,6 @@ class SdkBuilder
return $this;
}
/**
* @deprecated
*/
public function setEventLoggerProvider(EventLoggerProviderInterface $eventLoggerProvider): self
{
$this->eventLoggerProvider = $eventLoggerProvider;
return $this;
}
public function setPropagator(TextMapPropagatorInterface $propagator): self
{
$this->propagator = $propagator;
@ -81,7 +68,6 @@ class SdkBuilder
$tracerProvider = $this->tracerProvider ?? new NoopTracerProvider();
$meterProvider = $this->meterProvider ?? new NoopMeterProvider();
$loggerProvider = $this->loggerProvider ?? new NoopLoggerProvider();
$eventLoggerProvider = $this->eventLoggerProvider ?? new NoopEventLoggerProvider();
if ($this->autoShutdown) {
// rector rule disabled in config, because ShutdownHandler::register() does not keep a strong reference to $this
ShutdownHandler::register($tracerProvider->shutdown(...));
@ -93,7 +79,6 @@ class SdkBuilder
$tracerProvider,
$meterProvider,
$loggerProvider,
$eventLoggerProvider,
$this->propagator ?? NoopTextMapPropagator::getInstance(),
);
}
@ -109,7 +94,6 @@ class SdkBuilder
->withTracerProvider($sdk->getTracerProvider())
->withMeterProvider($sdk->getMeterProvider())
->withLoggerProvider($sdk->getLoggerProvider())
->withEventLoggerProvider($sdk->getEventLoggerProvider())
->storeInContext();
return Context::storage()->attach($context);

View File

@ -10,11 +10,8 @@ use OpenTelemetry\API\Globals;
use OpenTelemetry\API\Instrumentation\CachedInstrumentation;
use OpenTelemetry\API\Instrumentation\Configurator;
use OpenTelemetry\API\Instrumentation\ContextKeys;
use OpenTelemetry\API\Logs\EventLoggerInterface;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\API\Logs\LoggerProviderInterface;
use OpenTelemetry\API\Logs\NoopEventLoggerProvider;
use OpenTelemetry\API\Logs\NoopLoggerProvider;
use OpenTelemetry\API\Metrics\MeterInterface;
use OpenTelemetry\API\Metrics\MeterProviderInterface;
@ -56,7 +53,6 @@ final class InstrumentationTest extends TestCase
$this->assertInstanceOf(NoopMeterProvider::class, Globals::meterProvider());
$this->assertInstanceOf(NoopTextMapPropagator::class, Globals::propagator());
$this->assertInstanceOf(NoopLoggerProvider::class, Globals::loggerProvider());
$this->assertInstanceOf(NoopEventLoggerProvider::class, Globals::eventLoggerProvider());
}
public function test_globals_returns_configured_instances(): void
@ -65,14 +61,12 @@ final class InstrumentationTest extends TestCase
$meterProvider = $this->createMock(MeterProviderInterface::class);
$propagator = $this->createMock(TextMapPropagatorInterface::class);
$loggerProvider = $this->createMock(LoggerProviderInterface::class);
$eventLoggerProvider = $this->createMock(EventLoggerProviderInterface::class);
$scope = Configurator::create()
->withTracerProvider($tracerProvider)
->withMeterProvider($meterProvider)
->withPropagator($propagator)
->withLoggerProvider($loggerProvider)
->withEventLoggerProvider($eventLoggerProvider)
->activate();
try {
@ -80,7 +74,6 @@ final class InstrumentationTest extends TestCase
$this->assertSame($meterProvider, Globals::meterProvider());
$this->assertSame($propagator, Globals::propagator());
$this->assertSame($loggerProvider, Globals::loggerProvider());
$this->assertSame($eventLoggerProvider, Globals::eventLoggerProvider());
} finally {
$scope->detach();
}
@ -107,16 +100,12 @@ final class InstrumentationTest extends TestCase
$logger = $this->createMock(LoggerInterface::class);
$loggerProvider = $this->createMock(LoggerProviderInterface::class);
$loggerProvider->method('getLogger')->willReturn($logger);
$eventLogger = $this->createMock(EventLoggerInterface::class);
$eventLoggerProvider = $this->createMock(EventLoggerProviderInterface::class);
$eventLoggerProvider->method('getEventLogger')->willReturn($eventLogger);
$propagator = $this->createMock(TextMapPropagatorInterface::class);
$scope = Configurator::create()
->withTracerProvider($tracerProvider)
->withMeterProvider($meterProvider)
->withLoggerProvider($loggerProvider)
->withEventLoggerProvider($eventLoggerProvider)
->withPropagator($propagator)
->activate();
@ -124,7 +113,6 @@ final class InstrumentationTest extends TestCase
$this->assertSame($tracer, $instrumentation->tracer());
$this->assertSame($meter, $instrumentation->meter());
$this->assertSame($logger, $instrumentation->logger());
$this->assertSame($eventLogger, $instrumentation->eventLogger());
} finally {
$scope->detach();
}

View File

@ -6,8 +6,6 @@ namespace OpenTelemetry\Tests\Unit\Contrib\Otlp;
use OpenTelemetry\API\Trace\SpanContext;
use OpenTelemetry\API\Trace\SpanInterface;
use OpenTelemetry\Context\Context;
use OpenTelemetry\Context\ContextKeys;
use OpenTelemetry\Contrib\Otlp\LogsConverter;
use OpenTelemetry\SDK\Logs\ReadableLogRecord;
use PHPUnit\Framework\Attributes\CoversClass;
@ -20,8 +18,7 @@ class LogsConverterTest extends TestCase
private const TRACE_ID_BASE16 = 'ff000000000000000000000000000041';
private const SPAN_ID_BASE16 = 'ff00000000000041';
private const FLAGS = 12;
/** @var ReadableLogRecord&MockObject $record */
private $record;
private ReadableLogRecord&MockObject $record;
private LogsConverter $converter;
public function setUp(): void
@ -34,17 +31,27 @@ class LogsConverterTest extends TestCase
{
$this->record->method('getBody')->willReturn('body');
$request = $this->converter->convert([$this->record]);
$converted = $this->converter->convert([$this->record]);
/** @psalm-suppress InvalidArgument */
$row = $request->getResourceLogs()[0]->getScopeLogs()[0]->getLogRecords()[0];
$this->assertSame('body', $row->getBody()->getStringValue());
$logRecord = $converted->getResourceLogs()[0]->getScopeLogs()[0]->getLogRecords()[0];
$this->assertSame('body', $logRecord->getBody()->getStringValue());
}
public function test_convert_event_name(): void
{
$this->record->method('getEventName')->willReturn('my.event');
$converted = $this->converter->convert([$this->record]);
/** @psalm-suppress InvalidArgument */
$logRecord = $converted->getResourceLogs()[0]->getScopeLogs()[0]->getLogRecords()[0];
$this->assertSame('my.event', $logRecord->getEventName());
}
public function test_convert_with_context(): void
{
$spanContext = SpanContext::create(self::TRACE_ID_BASE16, self::SPAN_ID_BASE16, self::FLAGS);
$span = $this->createMock(SpanInterface::class);
$context = Context::getCurrent()->with(ContextKeys::span(), $span);
$span->method('getContext')->willReturn($spanContext);
$this->record->method('getSpanContext')->willReturn($spanContext);
$request = $this->converter->convert([$this->record]);

View File

@ -1,48 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Logs;
use OpenTelemetry\SDK\Common\Configuration\Variables;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\EventLoggerProviderFactory;
use OpenTelemetry\SDK\Logs\LoggerProviderInterface;
use OpenTelemetry\SDK\Logs\NoopEventLoggerProvider;
use OpenTelemetry\Tests\TestState;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
#[CoversClass(EventLoggerProviderFactory::class)]
class EventLoggerProviderFactoryTest extends TestCase
{
use TestState;
/**
* @psalm-suppress ArgumentTypeCoercion
*/
#[DataProvider('createProvider')]
public function test_create(string $disabled, string $expected): void
{
$this->setEnvironmentVariable(Variables::OTEL_SDK_DISABLED, $disabled);
$loggerProvider = $this->createMock(LoggerProviderInterface::class);
$factory = new EventLoggerProviderFactory();
$eventLoggerProvider = $factory->create($loggerProvider);
$this->assertInstanceOf($expected, $eventLoggerProvider);
}
public static function createProvider(): array
{
return [
'sdk disabled' => [
'true',
NoopEventLoggerProvider::class,
],
'sdk enabled' => [
'false',
EventLoggerProvider::class,
],
];
}
}

View File

@ -1,42 +0,0 @@
<?php
declare(strict_types=1);
namespace Unit\SDK\Logs;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\LoggerProviderInterface;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
#[CoversClass(EventLoggerProvider::class)]
class EventLoggerProviderTest extends TestCase
{
private EventLoggerProvider $eventLoggerProvider;
/** @var LoggerProviderInterface&MockObject $loggerProvider */
private LoggerProviderInterface $loggerProvider;
private LoggerInterface $logger;
public function setUp(): void
{
$this->loggerProvider = $this->createMock(LoggerProviderInterface::class);
$this->logger = $this->createMock(LoggerInterface::class);
$this->eventLoggerProvider = new EventLoggerProvider($this->loggerProvider);
}
public function test_emit(): void
{
$this->loggerProvider->expects($this->once())->method('getLogger')->willReturn($this->logger);
$this->eventLoggerProvider->getEventLogger('event.logger', '1.0', 'https://example.org/schema', ['foo' => 'foo']);
}
public function test_force_flush(): void
{
$this->loggerProvider->expects($this->once())->method('forceFlush')->willReturn(true);
$this->eventLoggerProvider->forceFlush();
}
}

View File

@ -1,98 +0,0 @@
<?php
declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK\Logs;
use OpenTelemetry\API\Common\Time\Clock;
use OpenTelemetry\API\Common\Time\TestClock;
use OpenTelemetry\API\Logs\LoggerInterface;
use OpenTelemetry\API\Logs\LogRecord;
use OpenTelemetry\API\Logs\Severity;
use OpenTelemetry\Context\Context;
use OpenTelemetry\SDK\Logs\EventLogger;
use OpenTelemetry\SDK\Logs\EventLoggerProvider;
use OpenTelemetry\SDK\Logs\LoggerProviderInterface;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
#[CoversClass(EventLogger::class)]
class EventLoggerTest extends TestCase
{
private LoggerInterface&MockObject $logger;
private EventLoggerProvider $eventLoggerProvider;
private TestClock $clock;
public function setUp(): void
{
$this->clock = new TestClock();
Clock::setDefault($this->clock);
$this->logger = $this->createMock(LoggerInterface::class);
$loggerProvider = $this->createMock(LoggerProviderInterface::class);
$loggerProvider->method('getLogger')->willReturn($this->logger);
$this->eventLoggerProvider = new EventLoggerProvider($loggerProvider);
}
public function test_emit(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord('some.payload'))
->setSeverityNumber(Severity::ERROR)
->setTimestamp(123456)
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
'bar' => 'bar',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger', '1.0', 'https://example.org/schema', ['foo' => 'foo']);
$eventLogger->emit('my.event', 'some.payload', 123456, severityNumber: Severity::ERROR, attributes: ['bar' => 'bar']);
}
public function test_default_values(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord())
->setSeverityNumber(Severity::INFO)
->setTimestamp($this->clock->now())
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger');
$eventLogger->emit('my.event');
}
/**
* "The user provided Attributes MUST not take over the event.name attribute"
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.32.0/specification/logs/event-sdk.md#emit-event
*/
public function test_event_name_attribute_is_ignored(): void
{
$this->logger->expects($this->once())->method('emit')->with($this->callback(function (LogRecord $logRecord) {
$expected = (new LogRecord())
->setSeverityNumber(Severity::INFO)
->setTimestamp($this->clock->now())
->setContext(Context::getCurrent())
->setAttributes([
'event.name' => 'my.event',
]);
$this->assertEquals($expected, $logRecord);
return true;
}));
$eventLogger = $this->eventLoggerProvider->getEventLogger('event.logger');
$eventLogger->emit('my.event', attributes: ['event.name' => 'not.my.event']);
}
}

View File

@ -1,23 +0,0 @@
<?php
declare(strict_types=1);
namespace Unit\SDK\Logs;
use OpenTelemetry\SDK\Logs\NoopEventLoggerProvider;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
#[CoversClass(NoopEventLoggerProvider::class)]
class NoopEventLoggerProviderTest extends TestCase
{
public function test_get_instance(): void
{
$this->assertInstanceOf(NoopEventLoggerProvider::class, NoopEventLoggerProvider::getInstance());
}
public function test_force_flush(): void
{
$this->assertTrue(NoopEventLoggerProvider::getInstance()->forceFlush());
}
}

View File

@ -7,7 +7,6 @@ namespace OpenTelemetry\Tests\Unit\SDK;
use OpenTelemetry\API\Globals;
use OpenTelemetry\API\Instrumentation\Configurator;
use OpenTelemetry\API\LoggerHolder;
use OpenTelemetry\API\Logs\NoopEventLoggerProvider;
use OpenTelemetry\API\Logs\NoopLoggerProvider;
use OpenTelemetry\API\Metrics\Noop\NoopMeterProvider;
use OpenTelemetry\API\Trace\NoopTracerProvider;
@ -70,7 +69,6 @@ class SdkAutoloaderTest extends TestCase
$this->assertInstanceOf(NoopMeterProvider::class, Globals::meterProvider());
$this->assertInstanceOf(NoopTracerProvider::class, Globals::tracerProvider());
$this->assertInstanceOf(NoopLoggerProvider::class, Globals::loggerProvider());
$this->assertInstanceOf(NoopEventLoggerProvider::class, Globals::eventLoggerProvider());
$this->assertInstanceOf(NoopTextMapPropagator::class, Globals::propagator(), 'propagator not initialized by disabled autoloader');
}

View File

@ -5,7 +5,6 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK;
use OpenTelemetry\API\Globals;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
use OpenTelemetry\SDK\Logs\LoggerProviderInterface;
use OpenTelemetry\SDK\Metrics\MeterProviderInterface;
@ -21,7 +20,6 @@ class SdkBuilderTest extends TestCase
private TracerProviderInterface $tracerProvider;
private MeterProviderInterface $meterProvider;
private LoggerProviderInterface $loggerProvider;
private EventLoggerProviderInterface $eventLoggerProvider;
private SdkBuilder $builder;
public function setUp(): void
@ -30,11 +28,9 @@ class SdkBuilderTest extends TestCase
$this->tracerProvider = $this->createMock(TracerProviderInterface::class);
$this->meterProvider = $this->createMock(MeterProviderInterface::class);
$this->loggerProvider = $this->createMock(LoggerProviderInterface::class);
$this->eventLoggerProvider = $this->createMock(EventLoggerProviderInterface::class);
$this->builder = (new SdkBuilder())
->setMeterProvider($this->meterProvider)
->setLoggerProvider($this->loggerProvider)
->setEventLoggerProvider($this->eventLoggerProvider)
->setPropagator($this->propagator)
->setTracerProvider($this->tracerProvider)
->setAutoShutdown(true);
@ -47,7 +43,6 @@ class SdkBuilderTest extends TestCase
$this->assertSame($this->propagator, $sdk->getPropagator());
$this->assertSame($this->tracerProvider, $sdk->getTracerProvider());
$this->assertSame($this->loggerProvider, $sdk->getLoggerProvider());
$this->assertSame($this->eventLoggerProvider, $sdk->getEventLoggerProvider());
}
public function test_build_and_register_global(): void
@ -57,7 +52,6 @@ class SdkBuilderTest extends TestCase
$this->assertSame($this->propagator, Globals::propagator());
$this->assertSame($this->tracerProvider, Globals::tracerProvider());
$this->assertSame($this->loggerProvider, Globals::loggerProvider());
$this->assertSame($this->eventLoggerProvider, Globals::eventLoggerProvider());
$scope->detach();
}
}

View File

@ -4,7 +4,6 @@ declare(strict_types=1);
namespace OpenTelemetry\Tests\Unit\SDK;
use OpenTelemetry\API\Logs\EventLoggerProviderInterface;
use OpenTelemetry\Context\Propagation\TextMapPropagatorInterface;
use OpenTelemetry\SDK\Common\Configuration\Variables;
use OpenTelemetry\SDK\Logs\LoggerProviderInterface;
@ -26,7 +25,6 @@ class SdkTest extends TestCase
private MeterProviderInterface $meterProvider;
private TracerProviderInterface $tracerProvider;
private LoggerProviderInterface $loggerProvider;
private EventLoggerProviderInterface $eventLoggerProvider;
public function setUp(): void
{
@ -34,7 +32,6 @@ class SdkTest extends TestCase
$this->meterProvider = $this->createMock(MeterProviderInterface::class);
$this->tracerProvider = $this->createMock(TracerProviderInterface::class);
$this->loggerProvider = $this->createMock(LoggerProviderInterface::class);
$this->eventLoggerProvider = $this->createMock(EventLoggerProviderInterface::class);
}
public function tearDown(): void
@ -90,11 +87,10 @@ class SdkTest extends TestCase
public function test_getters(): void
{
$sdk = new Sdk($this->tracerProvider, $this->meterProvider, $this->loggerProvider, $this->eventLoggerProvider, $this->propagator);
$sdk = new Sdk($this->tracerProvider, $this->meterProvider, $this->loggerProvider, $this->propagator);
$this->assertSame($this->propagator, $sdk->getPropagator());
$this->assertSame($this->meterProvider, $sdk->getMeterProvider());
$this->assertSame($this->tracerProvider, $sdk->getTracerProvider());
$this->assertSame($this->loggerProvider, $sdk->getLoggerProvider());
$this->assertSame($this->eventLoggerProvider, $sdk->getEventLoggerProvider());
}
}