diff --git a/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderExtensions.cs b/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderExtensions.cs
index 78364924e03..a07436014fa 100644
--- a/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderExtensions.cs
+++ b/src/OpenTelemetry/Logs/Builder/LoggerProviderBuilderExtensions.cs
@@ -18,6 +18,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Logging;
using OpenTelemetry.Internal;
using OpenTelemetry.Resources;
@@ -28,6 +29,24 @@ namespace OpenTelemetry.Logs;
///
internal static class LoggerProviderBuilderExtensions
{
+ ///
+ /// Registers a configuration action for the used by
+ /// integration ().
+ ///
+ /// .
+ /// Configuration action.
+ /// Returns for chaining.
+ public static LoggerProviderBuilder ConfigureLoggerOptions(
+ this LoggerProviderBuilder loggerProviderBuilder,
+ Action configure)
+ {
+ Guard.ThrowIfNull(configure);
+
+ return loggerProviderBuilder.ConfigureServices(
+ services => services.Configure(configure));
+ }
+
///
/// Sets the from which the Resource associated with
/// this provider is built from. Overwrites currently set ResourceBuilder.
diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs
index f2a392e52e7..208737ffa65 100644
--- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs
+++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs
@@ -89,6 +89,7 @@ public class OpenTelemetryLoggerOptions
///
/// Log processor to add.
/// Returns for chaining.
+ // todo: [Obsolete("Use the LoggerProviderBuilder class to manage processors. The AddProcessor method on OpenTelemetryLoggerOptions will be removed in a future version.")]
public OpenTelemetryLoggerOptions AddProcessor(BaseProcessor processor)
{
Guard.ThrowIfNull(processor);
@@ -104,6 +105,7 @@ public OpenTelemetryLoggerOptions AddProcessor(BaseProcessor processo
///
/// from which Resource will be built.
/// Returns for chaining.
+ // todo: [Obsolete("Use the LoggerProviderBuilder class to manage resources. The AddProcessor method on OpenTelemetryLoggerOptions will be removed in a future version.")]
public OpenTelemetryLoggerOptions SetResourceBuilder(ResourceBuilder resourceBuilder)
{
Guard.ThrowIfNull(resourceBuilder);
diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs
index 6f63fce672a..72e70f2b696 100644
--- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs
+++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs
@@ -41,45 +41,10 @@ public static class OpenTelemetryLoggingExtensions
///
/// The to use.
/// The supplied for call chaining.
+ // todo: [Obsolete("Call AddOpenTelemetryLogging instead the AddOpenTelemetry method will be removed in a future version.")]
public static ILoggingBuilder AddOpenTelemetry(
this ILoggingBuilder builder)
- {
- Guard.ThrowIfNull(builder);
-
- builder.AddConfiguration();
-
- // Note: This will bind logger options element (eg "Logging:OpenTelemetry") to OpenTelemetryLoggerOptions
- LoggerProviderOptions.RegisterProviderOptions(builder.Services);
-
- new LoggerProviderServiceCollectionBuilder(builder.Services).ConfigureBuilder(
- (sp, logging) =>
- {
- var options = sp.GetRequiredService>().CurrentValue;
-
- if (options.ResourceBuilder != null)
- {
- logging.SetResourceBuilder(options.ResourceBuilder);
-
- options.ResourceBuilder = null;
- }
-
- foreach (var processor in options.Processors)
- {
- logging.AddProcessor(processor);
- }
-
- options.Processors.Clear();
- });
-
- builder.Services.TryAddEnumerable(
- ServiceDescriptor.Singleton(
- sp => new OpenTelemetryLoggerProvider(
- sp.GetRequiredService(),
- sp.GetRequiredService>().CurrentValue,
- disposeProvider: false)));
-
- return builder;
- }
+ => AddOpenTelemetryLogging(builder);
///
/// Adds an OpenTelemetry logger named 'OpenTelemetry' to the .
@@ -88,15 +53,89 @@ public static ILoggingBuilder AddOpenTelemetry(
/// The to use.
/// Optional configuration action.
/// The supplied for call chaining.
+ // todo: [Obsolete("Call AddOpenTelemetryLogging and use LoggerProviderBuilder.ConfigureLoggerOptions instead. The AddOpenTelemetry method will be removed in a future version.")]
public static ILoggingBuilder AddOpenTelemetry(
this ILoggingBuilder builder,
Action? configure)
{
+ AddOpenTelemetryLogging(builder);
+
if (configure != null)
{
builder.Services.Configure(configure);
}
- return AddOpenTelemetry(builder);
+ return builder;
+ }
+
+ ///
+ /// Adds an OpenTelemetry logger named 'OpenTelemetry' to the .
+ ///
+ ///
+ /// The to use.
+ /// The supplied for call chaining.
+ internal static ILoggingBuilder AddOpenTelemetryLogging(
+ this ILoggingBuilder builder)
+ => AddOpenTelemetryLogging(builder, b => { });
+
+ ///
+ /// Adds an OpenTelemetry logger named 'OpenTelemetry' to the .
+ ///
+ ///
+ /// The to use.
+ /// Configuration action.
+ /// The supplied for call chaining.
+ internal static ILoggingBuilder AddOpenTelemetryLogging(
+ this ILoggingBuilder builder,
+ Action configure)
+ {
+ Guard.ThrowIfNull(configure);
+
+ AddOpenTelemetryLoggerIntegration(builder);
+
+ var loggerBuilder = new LoggerProviderServiceCollectionBuilder(builder.Services);
+
+ // Note: This code is to support legacy AddProcessor & SetResourceBuilder APIs on OpenTelemetryLoggerOptions.
+ loggerBuilder.ConfigureBuilder((sp, sdkLoggerBuilder) =>
+ {
+ var options = sp.GetRequiredService>().CurrentValue;
+
+ if (options.ResourceBuilder != null)
+ {
+ sdkLoggerBuilder.SetResourceBuilder(options.ResourceBuilder);
+
+ options.ResourceBuilder = null;
+ }
+
+ foreach (var processor in options.Processors)
+ {
+ sdkLoggerBuilder.AddProcessor(processor);
+ }
+
+ options.Processors.Clear();
+ });
+
+ configure(loggerBuilder);
+
+ return builder;
+ }
+
+ private static void AddOpenTelemetryLoggerIntegration(ILoggingBuilder builder)
+ {
+ Guard.ThrowIfNull(builder);
+
+ builder.AddConfiguration();
+
+ // Note: This will bind logger options element (eg "Logging:OpenTelemetry") to OpenTelemetryLoggerOptions
+ LoggerProviderOptions.RegisterProviderOptions(builder.Services);
+
+ builder.Services.AddOpenTelemetrySharedProviderBuilderServices();
+
+ builder.Services.TryAddEnumerable(
+ ServiceDescriptor.Singleton(
+ sp => new OpenTelemetryLoggerProvider(
+ sp.GetRequiredService(),
+ sp.GetRequiredService>().CurrentValue,
+ disposeProvider: false)));
}
}