From e74e0ed5dd2ae2fd5f99ecdf04c1b28341674121 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 6 Jun 2023 13:58:09 -0700 Subject: [PATCH] [console-exporter] Add extension on LoggerProviderBuilder (#4549) --- .../AssemblyInfo.cs | 1 + src/OpenTelemetry.Api/AssemblyInfo.cs | 1 + .../ConsoleExporterLoggingExtensions.cs | 53 +++++++++++++++++++ .../OpenTelemetry.Exporter.Console.csproj | 12 +++-- src/OpenTelemetry/AssemblyInfo.cs | 1 + 5 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Api.ProviderBuilderExtensions/AssemblyInfo.cs b/src/OpenTelemetry.Api.ProviderBuilderExtensions/AssemblyInfo.cs index c8c47e0bd..dce5df270 100644 --- a/src/OpenTelemetry.Api.ProviderBuilderExtensions/AssemblyInfo.cs +++ b/src/OpenTelemetry.Api.ProviderBuilderExtensions/AssemblyInfo.cs @@ -17,6 +17,7 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("OpenTelemetry" + AssemblyInfo.PublicKey)] +[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Console" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Extensions.Hosting" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Tests" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Api.ProviderBuilderExtensions.Tests" + AssemblyInfo.PublicKey)] diff --git a/src/OpenTelemetry.Api/AssemblyInfo.cs b/src/OpenTelemetry.Api/AssemblyInfo.cs index 3d46ffb47..1d0d887c5 100644 --- a/src/OpenTelemetry.Api/AssemblyInfo.cs +++ b/src/OpenTelemetry.Api/AssemblyInfo.cs @@ -20,6 +20,7 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("OpenTelemetry.Api.ProviderBuilderExtensions" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Api.ProviderBuilderExtensions.Tests" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Api.Tests" + AssemblyInfo.PublicKey)] +[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Console" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.InMemory" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Extensions.Hosting" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Extensions.Hosting.Tests" + AssemblyInfo.PublicKey)] diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleExporterLoggingExtensions.cs b/src/OpenTelemetry.Exporter.Console/ConsoleExporterLoggingExtensions.cs index 50b81a549..8a2c8af6e 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleExporterLoggingExtensions.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleExporterLoggingExtensions.cs @@ -14,6 +14,8 @@ // limitations under the License. // +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using OpenTelemetry.Exporter; using OpenTelemetry.Internal; @@ -26,6 +28,7 @@ namespace OpenTelemetry.Logs /// /// options to use. /// The instance of to chain the calls. + /// todo: [Obsolete("Call LoggerProviderBuilder.AddConsoleExporter instead this method will be removed in a future version.")] public static OpenTelemetryLoggerOptions AddConsoleExporter(this OpenTelemetryLoggerOptions loggerOptions) => AddConsoleExporter(loggerOptions, configure: null); @@ -35,6 +38,7 @@ namespace OpenTelemetry.Logs /// options to use. /// Callback action for configuring . /// The instance of to chain the calls. + /// todo: [Obsolete("Call LoggerProviderBuilder.AddConsoleExporter instead this method will be removed in a future version.")] public static OpenTelemetryLoggerOptions AddConsoleExporter(this OpenTelemetryLoggerOptions loggerOptions, Action configure) { Guard.ThrowIfNull(loggerOptions); @@ -43,5 +47,54 @@ namespace OpenTelemetry.Logs configure?.Invoke(options); return loggerOptions.AddProcessor(new SimpleLogRecordExportProcessor(new ConsoleLogRecordExporter(options))); } + + /// + /// Adds Console exporter with LoggerProviderBuilder. + /// + /// . + /// The supplied instance of to chain the calls. + internal static LoggerProviderBuilder AddConsoleExporter( + this LoggerProviderBuilder loggerProviderBuilder) + => AddConsoleExporter(loggerProviderBuilder, name: null, configure: null); + + /// + /// Adds Console exporter with LoggerProviderBuilder. + /// + /// . + /// Callback action for configuring . + /// The supplied instance of to chain the calls. + internal static LoggerProviderBuilder AddConsoleExporter( + this LoggerProviderBuilder loggerProviderBuilder, + Action configure) + => AddConsoleExporter(loggerProviderBuilder, name: null, configure); + + /// + /// Adds Console exporter with LoggerProviderBuilder. + /// + /// . + /// Name which is used when retrieving options. + /// Callback action for configuring . + /// The supplied instance of to chain the calls. + internal static LoggerProviderBuilder AddConsoleExporter( + this LoggerProviderBuilder loggerProviderBuilder, + string name, + Action configure) + { + Guard.ThrowIfNull(loggerProviderBuilder); + + name ??= Options.DefaultName; + + if (configure != null) + { + loggerProviderBuilder.ConfigureServices(services => services.Configure(name, configure)); + } + + return loggerProviderBuilder.AddProcessor(sp => + { + var options = sp.GetRequiredService>().Get(name); + + return new SimpleLogRecordExportProcessor(new ConsoleLogRecordExporter(options)); + }); + } } } diff --git a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj index b7afb8a8f..b8bd2ceac 100644 --- a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj +++ b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj @@ -25,14 +25,18 @@ - - - - + + diff --git a/src/OpenTelemetry/AssemblyInfo.cs b/src/OpenTelemetry/AssemblyInfo.cs index 6b94f59eb..6214d72ad 100644 --- a/src/OpenTelemetry/AssemblyInfo.cs +++ b/src/OpenTelemetry/AssemblyInfo.cs @@ -17,6 +17,7 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("OpenTelemetry.Tests" + AssemblyInfo.PublicKey)] +[assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Console" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.InMemory" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore" + AssemblyInfo.PublicKey)] [assembly: InternalsVisibleTo("OpenTelemetry.Exporter.Prometheus.AspNetCore.Tests" + AssemblyInfo.PublicKey)]