diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md index 3e65833fffe..0c969a7fba7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/CHANGELOG.md @@ -7,6 +7,10 @@ management ([#3707](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3707)) +* `OtlpExporterOptions` can now be bound to `IConfiguation` when using the + `OtlpLogExporterHelperExtensions.AddOtlpExporter` extension + ([#3812](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3812)) + ## Unreleased ## 1.4.0-beta.2 diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs index 426ab70ab05..67f7705fe1e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs @@ -18,6 +18,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using OpenTelemetry.Exporter; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Internal; namespace OpenTelemetry.Logs @@ -102,16 +103,27 @@ public static LoggerProviderBuilder AddOtlpExporter( name ??= Options.DefaultName; - if (configure != null) + builder.ConfigureServices(services => { - builder.ConfigureServices(services => services.Configure(name, configure)); - } + if (configure != null) + { + services.Configure(name, configure); + } + + services.RegisterOptionsFactory(configuration => new SdkLimitOptions(configuration)); + services.RegisterOptionsFactory(configuration => new OtlpExporterOptions(configuration)); + }); builder.ConfigureBuilder((sp, builder) => { - var options = sp.GetRequiredService>().Get(name); + var exporterOptions = sp.GetRequiredService>().Get(name); - AddOtlpExporter(builder, options, sp); + // Note: Not using name here for SdkLimitOptions. There should + // only be one provider for a given service collection so + // SdkLimitOptions is treated as a single default instance. + var sdkLimitOptions = sp.GetRequiredService>().CurrentValue; + + AddOtlpExporter(builder, exporterOptions, sdkLimitOptions, sp); }); return builder; @@ -120,10 +132,12 @@ public static LoggerProviderBuilder AddOtlpExporter( private static void AddOtlpExporter( LoggerProviderBuilder builder, OtlpExporterOptions exporterOptions, + SdkLimitOptions sdkLimitOptions, IServiceProvider serviceProvider) { exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpLogExporter"); - var otlpExporter = new OtlpLogExporter(exporterOptions); + + var otlpExporter = new OtlpLogExporter(exporterOptions, sdkLimitOptions); if (exporterOptions.ExportProcessorType == ExportProcessorType.Simple) { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs index 889fe7fca5d..cfc8c28037f 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs @@ -80,9 +80,9 @@ public static TracerProviderBuilder AddOtlpExporter( // Note: Not using name here for SdkLimitOptions. There should // only be one provider for a given service collection so // SdkLimitOptions is treated as a single default instance. - var sdkOptionsManager = sp.GetRequiredService>().CurrentValue; + var sdkLimitOptions = sp.GetRequiredService>().CurrentValue; - AddOtlpExporter(builder, exporterOptions, sdkOptionsManager, sp); + AddOtlpExporter(builder, exporterOptions, sdkLimitOptions, sp); }); } diff --git a/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs b/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs index 8ae5bd26e48..ec643e62d50 100644 --- a/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs +++ b/src/OpenTelemetry/Internal/Builder/ProviderBuilderServiceCollectionExtensions.cs @@ -27,6 +27,13 @@ namespace Microsoft.Extensions.DependencyInjection; internal static class ProviderBuilderServiceCollectionExtensions { + public static IServiceCollection AddOpenTelemetryLoggerProviderBuilderServices(this IServiceCollection services) + { + services.AddOpenTelemetryProviderBuilderServices(); + + return services; + } + public static IServiceCollection AddOpenTelemetryMeterProviderBuilderServices(this IServiceCollection services) { services.AddOpenTelemetryProviderBuilderServices(); diff --git a/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderSdk.cs b/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderSdk.cs index 5e94c915302..921b5524c40 100644 --- a/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderSdk.cs +++ b/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderSdk.cs @@ -53,7 +53,7 @@ public LoggerProviderBuilderSdk(IServiceCollection services) { Debug.Assert(services != null, "services was null"); - services.AddOptions(); + services!.AddOpenTelemetryLoggerProviderBuilderServices(); services!.TryAddSingleton(sp => new LoggerProviderSdk(sp, ownsServiceProvider: false)); this.services = services; @@ -66,7 +66,7 @@ public LoggerProviderBuilderSdk() { var services = new ServiceCollection(); - services.AddOptions(); + services.AddOpenTelemetryLoggerProviderBuilderServices(); this.services = services; this.ownsServices = true;