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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions