Skip to content

Commit

Permalink
Support named options in the logger provider builder AddExporter API. (
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeBlanch committed Sep 14, 2022
1 parent faf5bb5 commit ef46e82
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 58 deletions.
2 changes: 2 additions & 0 deletions src/OpenTelemetry/.publicApi/net462/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ OpenTelemetry.Logs.LogRecord.TraceFlags.set -> void
OpenTelemetry.Logs.LogRecord.TraceId.set -> void
OpenTelemetry.Logs.LogRecord.TraceState.set -> void
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor<T>() -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ConfigureProvider(System.Action<System.IServiceProvider!, OpenTelemetry.Logs.OpenTelemetryLoggerProvider!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
Expand Down
2 changes: 2 additions & 0 deletions src/OpenTelemetry/.publicApi/net6.0/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ OpenTelemetry.Logs.LogRecord.TraceFlags.set -> void
OpenTelemetry.Logs.LogRecord.TraceId.set -> void
OpenTelemetry.Logs.LogRecord.TraceState.set -> void
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor<T>() -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ConfigureProvider(System.Action<System.IServiceProvider!, OpenTelemetry.Logs.OpenTelemetryLoggerProvider!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ OpenTelemetry.Logs.LogRecord.TraceFlags.set -> void
OpenTelemetry.Logs.LogRecord.TraceId.set -> void
OpenTelemetry.Logs.LogRecord.TraceState.set -> void
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor<T>() -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ConfigureProvider(System.Action<System.IServiceProvider!, OpenTelemetry.Logs.OpenTelemetryLoggerProvider!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ OpenTelemetry.Logs.LogRecord.TraceFlags.set -> void
OpenTelemetry.Logs.LogRecord.TraceId.set -> void
OpenTelemetry.Logs.LogRecord.TraceState.set -> void
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter(OpenTelemetry.ExportProcessorType exportProcessorType, OpenTelemetry.BaseExporter<OpenTelemetry.Logs.LogRecord!>! exporter, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, string? name, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddExporter<T>(OpenTelemetry.ExportProcessorType exportProcessorType, System.Action<OpenTelemetry.Logs.ExportLogRecordProcessorOptions!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor<T>() -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
OpenTelemetry.Logs.OpenTelemetryLoggerOptions.ConfigureProvider(System.Action<System.IServiceProvider!, OpenTelemetry.Logs.OpenTelemetryLoggerProvider!>! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions!
Expand Down
74 changes: 47 additions & 27 deletions src/OpenTelemetry/Logs/Options/OpenTelemetryLoggerOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,43 +141,63 @@ public OpenTelemetryLoggerOptions AddProcessor<T>()
/// <param name="exporter">LogRecord exporter to add.</param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter(ExportProcessorType exportProcessorType, BaseExporter<LogRecord> exporter)
=> this.AddExporter(exportProcessorType, exporter, o => { });
=> this.AddExporter(exportProcessorType, exporter, name: null, configure: null);

/// <summary>
/// Adds an exporter to the provider.
/// </summary>
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
/// <param name="exporter">LogRecord exporter to add.</param>
/// <param name="configure">Callback action to configure <see
/// cref="ExportLogRecordProcessorOptions"/>. Only invoked when <paramref
/// name="exportProcessorType"/> is <see
/// cref="ExportProcessorType.Batch"/>.</param>
/// <param name="configure"><inheritdoc cref="AddExporter{T}(ExportProcessorType, string?, Action{ExportLogRecordProcessorOptions}?)" path="/param[@name='configure']"/></param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter(ExportProcessorType exportProcessorType, BaseExporter<LogRecord> exporter, Action<ExportLogRecordProcessorOptions> configure)
=> this.AddExporter(exportProcessorType, exporter, name: null, configure);

/// <summary>
/// Adds an exporter to the provider.
/// </summary>
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
/// <param name="exporter">LogRecord exporter to add.</param>
/// <param name="name">Name which is used when retrieving options.</param>
/// <param name="configure"><inheritdoc cref="AddExporter{T}(ExportProcessorType, string?, Action{ExportLogRecordProcessorOptions}?)" path="/param[@name='configure']"/></param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter(
ExportProcessorType exportProcessorType,
BaseExporter<LogRecord> exporter,
string? name,
Action<ExportLogRecordProcessorOptions>? configure)
{
Guard.ThrowIfNull(exporter);
Guard.ThrowIfNull(configure);

this.ConfigureProvider((sp, provider)
=> provider.AddProcessor(
BuildExportProcessor(sp, exportProcessorType, exporter, configure)));
BuildExportProcessor(sp, exportProcessorType, exporter, name, configure)));

return this;
}

/// <summary>
/// Adds an exporter to the provider which will be retrieved using dependency injection.
/// </summary>
/// <remarks>
/// Note: The type specified by <typeparamref name="T"/> will be
/// registered as a singleton service into application services.
/// </remarks>
/// <remarks><inheritdoc cref="AddExporter{T}(ExportProcessorType, string?, Action{ExportLogRecordProcessorOptions}?)" path="/remarks"/></remarks>
/// <typeparam name="T">Exporter type.</typeparam>
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter<T>(ExportProcessorType exportProcessorType)
where T : BaseExporter<LogRecord>
=> this.AddExporter<T>(exportProcessorType, o => { });
=> this.AddExporter<T>(exportProcessorType, name: null, configure: null);

/// <summary>
/// Adds an exporter to the provider which will be retrieved using dependency injection.
/// </summary>
/// <remarks><inheritdoc cref="AddExporter{T}(ExportProcessorType, string?, Action{ExportLogRecordProcessorOptions}?)" path="/remarks"/></remarks>
/// <typeparam name="T">Exporter type.</typeparam>
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
/// <param name="configure"><inheritdoc cref="AddExporter{T}(ExportProcessorType, string?, Action{ExportLogRecordProcessorOptions}?)" path="/param[@name='configure']"/></param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter<T>(ExportProcessorType exportProcessorType, Action<ExportLogRecordProcessorOptions> configure)
where T : BaseExporter<LogRecord>
=> this.AddExporter<T>(exportProcessorType, name: null, configure);

/// <summary>
/// Adds an exporter to the provider which will be retrieved using dependency injection.
Expand All @@ -188,20 +208,22 @@ public OpenTelemetryLoggerOptions AddExporter<T>(ExportProcessorType exportProce
/// </remarks>
/// <typeparam name="T">Exporter type.</typeparam>
/// <param name="exportProcessorType"><see cref="ExportProcessorType"/>.</param>
/// <param name="name">Name which is used when retrieving options.</param>
/// <param name="configure">Callback action to configure <see
/// cref="ExportLogRecordProcessorOptions"/>. Only invoked when <paramref
/// name="exportProcessorType"/> is <see
/// cref="ExportProcessorType.Batch"/>.</param>
/// <returns>Returns <see cref="OpenTelemetryLoggerOptions"/> for chaining.</returns>
public OpenTelemetryLoggerOptions AddExporter<T>(ExportProcessorType exportProcessorType, Action<ExportLogRecordProcessorOptions> configure)
public OpenTelemetryLoggerOptions AddExporter<T>(
ExportProcessorType exportProcessorType,
string? name,
Action<ExportLogRecordProcessorOptions>? configure)
where T : BaseExporter<LogRecord>
{
Guard.ThrowIfNull(configure);

this.TryAddSingleton<T>();
this.ConfigureProvider((sp, provider)
=> provider.AddProcessor(
BuildExportProcessor(sp, exportProcessorType, sp.GetRequiredService<T>(), configure)));
BuildExportProcessor(sp, exportProcessorType, sp.GetRequiredService<T>(), name, configure)));

return this;
}
Expand Down Expand Up @@ -393,20 +415,21 @@ internal void ApplyTo(OpenTelemetryLoggerOptions other)
IServiceProvider serviceProvider,
ExportProcessorType exportProcessorType,
BaseExporter<LogRecord> exporter,
Action<ExportLogRecordProcessorOptions> configure)
string? name,
Action<ExportLogRecordProcessorOptions>? configure)
{
name ??= Options.DefaultName;

switch (exportProcessorType)
{
case ExportProcessorType.Simple:
return new SimpleLogRecordExportProcessor(exporter);
case ExportProcessorType.Batch:
var options = new ExportLogRecordProcessorOptions
{
ExportProcessorType = ExportProcessorType.Batch,
BatchExportProcessorOptions = serviceProvider.GetRequiredService<IOptions<BatchExportLogRecordProcessorOptions>>().Value,
};
var options = serviceProvider.GetRequiredService<IOptionsSnapshot<ExportLogRecordProcessorOptions>>().Get(name);

options.ExportProcessorType = ExportProcessorType.Batch;

configure(options);
configure?.Invoke(options);

var batchOptions = options.BatchExportProcessorOptions;

Expand All @@ -426,10 +449,7 @@ private void TryAddSingleton<T>()
{
var services = this.services;

if (services != null)
{
services.TryAddSingleton<T>();
}
services?.TryAddSingleton<T>();
}
}
}
8 changes: 3 additions & 5 deletions src/OpenTelemetry/Trace/Builder/TracerProviderBuilderBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,9 @@ protected TracerProvider Build()
case ExportProcessorType.Simple:
return new SimpleActivityExportProcessor(exporter);
case ExportProcessorType.Batch:
var options = new ExportActivityProcessorOptions
{
ExportProcessorType = ExportProcessorType.Batch,
BatchExportProcessorOptions = serviceProvider.GetRequiredService<IOptionsSnapshot<BatchExportActivityProcessorOptions>>().Get(name),
};
var options = serviceProvider.GetRequiredService<IOptionsSnapshot<ExportActivityProcessorOptions>>().Get(name);

options.ExportProcessorType = ExportProcessorType.Batch;

configure?.Invoke(options);

Expand Down
Loading

0 comments on commit ef46e82

Please sign in to comment.