[logs-branch] Support loading OtlpLogExporter envvars from IConfiguration (#3812)
* Apply configuration pattern to OtlpLogExporter paths. * CHANGELOG patch.
This commit is contained in:
parent
aba8a6980d
commit
2f6e7e3a2b
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ using System;
|
|||
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 @@ namespace OpenTelemetry.Logs
|
|||
|
||||
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<IOptionsMonitor<OtlpExporterOptions>>().Get(name);
|
||||
var exporterOptions = sp.GetRequiredService<IOptionsMonitor<OtlpExporterOptions>>().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<IOptionsMonitor<SdkLimitOptions>>().CurrentValue;
|
||||
|
||||
AddOtlpExporter(builder, exporterOptions, sdkLimitOptions, sp);
|
||||
});
|
||||
|
||||
return builder;
|
||||
|
|
@ -120,10 +132,12 @@ namespace OpenTelemetry.Logs
|
|||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -80,9 +80,9 @@ namespace OpenTelemetry.Trace
|
|||
// 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<IOptionsMonitor<SdkLimitOptions>>().CurrentValue;
|
||||
var sdkLimitOptions = sp.GetRequiredService<IOptionsMonitor<SdkLimitOptions>>().CurrentValue;
|
||||
|
||||
AddOtlpExporter(builder, exporterOptions, sdkOptionsManager, sp);
|
||||
AddOtlpExporter(builder, exporterOptions, sdkLimitOptions, sp);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ internal sealed class LoggerProviderBuilderSdk : LoggerProviderBuilder, IDeferre
|
|||
{
|
||||
Debug.Assert(services != null, "services was null");
|
||||
|
||||
services.AddOptions();
|
||||
services!.AddOpenTelemetryLoggerProviderBuilderServices();
|
||||
services!.TryAddSingleton<LoggerProvider>(sp => new LoggerProviderSdk(sp, ownsServiceProvider: false));
|
||||
|
||||
this.services = services;
|
||||
|
|
@ -66,7 +66,7 @@ internal sealed class LoggerProviderBuilderSdk : LoggerProviderBuilder, IDeferre
|
|||
{
|
||||
var services = new ServiceCollection();
|
||||
|
||||
services.AddOptions();
|
||||
services.AddOpenTelemetryLoggerProviderBuilderServices();
|
||||
|
||||
this.services = services;
|
||||
this.ownsServices = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue