internal sealed class ElasticOpenTelemetryService()

in src/Elastic.OpenTelemetry/Hosting/ElasticOpenTelemetryService.cs [17:48]


internal sealed class ElasticOpenTelemetryService(IServiceProvider serviceProvider) : IHostedLifecycleService
{
	private ElasticOpenTelemetryComponents? _components;

	public Task StartingAsync(CancellationToken cancellationToken)
	{
		var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
		var logger = loggerFactory?.CreateElasticLogger() ?? NullLogger.Instance;

		_components = serviceProvider.GetService<ElasticOpenTelemetryComponents>();
		_components?.SetAdditionalLogger(logger, ElasticOpenTelemetry.ActivationMethod);

		return Task.CompletedTask;
	}

	public Task StartAsync(CancellationToken cancellationToken) => Task.CompletedTask;

	public Task StartedAsync(CancellationToken cancellationToken) => Task.CompletedTask;

	public Task StoppingAsync(CancellationToken cancellationToken) => Task.CompletedTask;

	public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;

	public async Task StoppedAsync(CancellationToken cancellationToken)
	{
		if (_components?.Logger is not null)
			await _components.Logger.DisposeAsync().ConfigureAwait(false);

		if (_components?.LoggingEventListener is not null)
			await _components.LoggingEventListener.DisposeAsync().ConfigureAwait(false);
	}
}