Skip to content

Change the AddOpenTelemetryEventLogging to register OpenTelemetryEventLoggingHostedService before TelemetryHostedService #41

@gao-artur

Description

@gao-artur

The AddOpenTelemetry method injects its hosted service as the first service in the service collection.

services.Insert(0, ServiceDescriptor.Singleton<IHostedService, TelemetryHostedService>());

This means that the library event listener won't capture any events produced during the OTel initialization process because it will be registered later.

I suggest changing the AddOpenTelemetryEventLogging extension to be based on IOpenTelemetryBuilder instead of IServiceCollection and injecting the OpenTelemetryEventLoggingHostedService before TelemetryHostedService

public static IOpenTelemetryBuilder AddOpenTelemetryEventLogging(
    this IOpenTelemetryBuilder builder,
    Action<OpenTelemetryEventLoggingOptions>? configure = null)
{
    if (configure != null)
        builder.Services.Configure(configure);

    return builder.Services.Insert(0, ServiceDescriptor.Singleton<IHostedService, OpenTelemetryEventLoggingHostedService>());
}

The usage

services.AddOpenTelemetry()
    .AddOpenTelemetryEventLogging() // rename to WithOpenTelemetryEventLogging?
    .WithTracing()
    .WithMetrics();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions