From 8fa8315aac15a71e34d41765be50889019bac83a Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 3 Oct 2023 15:13:52 -0700 Subject: [PATCH 01/24] WIP supporting options through DI. --- .../Stable/net462/PublicAPI.Shipped.txt | 65 ++++++++-------- .../Stable/net6.0/PublicAPI.Shipped.txt | 65 ++++++++-------- .../netstandard2.0/PublicAPI.Shipped.txt | 65 ++++++++-------- .../netstandard2.1/PublicAPI.Shipped.txt | 65 ++++++++-------- .../OtlpLogExporter.cs | 18 +++-- .../OtlpLogExporterHelperExtensions.cs | 75 +++++++++++++------ .../ILogger/OpenTelemetryLoggerOptions.cs | 19 ++++- .../ILogger/OpenTelemetryLoggerProvider.cs | 4 +- .../ILogger/OpenTelemetryLoggingExtensions.cs | 6 +- src/OpenTelemetry/ProviderExtensions.cs | 7 +- .../IntegrationTest/IntegrationTests.cs | 32 ++++---- .../OtlpLogExporterTests.cs | 21 +++--- 12 files changed, 252 insertions(+), 190 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt index 7a5d8b22a6..962432ef16 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt @@ -1,41 +1,42 @@ +#nullable enable OpenTelemetry.Exporter.OtlpExporterOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpMetricExporter -OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Exporter.OtlpTraceExporter -OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions -override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool -override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt index 7a5d8b22a6..962432ef16 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt @@ -1,41 +1,42 @@ +#nullable enable OpenTelemetry.Exporter.OtlpExporterOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpMetricExporter -OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Exporter.OtlpTraceExporter -OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions -override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool -override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt index 7a5d8b22a6..962432ef16 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt @@ -1,41 +1,42 @@ +#nullable enable OpenTelemetry.Exporter.OtlpExporterOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpMetricExporter -OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Exporter.OtlpTraceExporter -OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions -override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool -override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt index 7a5d8b22a6..962432ef16 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt @@ -1,41 +1,42 @@ +#nullable enable OpenTelemetry.Exporter.OtlpExporterOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions -OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri -OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string -OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func -OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions +~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri +~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string +~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func +~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpMetricExporter -OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpMetricExporter.OtlpMetricExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Exporter.OtlpTraceExporter -OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void +~OpenTelemetry.Exporter.OtlpTraceExporter.OtlpTraceExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions -override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool -override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions loggerOptions, System.Action configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult +~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 715ec0de26..847d04f461 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -14,6 +14,8 @@ // limitations under the License. // +#nullable enable + using System.Diagnostics; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; @@ -33,14 +35,14 @@ internal sealed class OtlpLogExporter : BaseExporter private readonly IExportClient exportClient; private readonly OtlpLogRecordTransformer otlpLogRecordTransformer; - private OtlpResource.Resource processResource; + private OtlpResource.Resource? processResource; /// /// Initializes a new instance of the class. /// /// Configuration options for the exporter. public OtlpLogExporter(OtlpExporterOptions options) - : this(options, new(), null) + : this(options, sdkLimitOptions: new(), experimentalOptions: new(), exportClient: null) { } @@ -49,14 +51,17 @@ public OtlpLogExporter(OtlpExporterOptions options) /// /// Configuration options for the exporter. /// . + /// . /// Client used for sending export request. internal OtlpLogExporter( OtlpExporterOptions exporterOptions, SdkLimitOptions sdkLimitOptions, - IExportClient exportClient = null) + ExperimentalOptions experimentalOptions, + IExportClient? exportClient = null) { Debug.Assert(exporterOptions != null, "exporterOptions was null"); Debug.Assert(sdkLimitOptions != null, "sdkLimitOptions was null"); + Debug.Assert(experimentalOptions != null, "experimentalOptions was null"); // Each of the Otlp exporters: Traces, Metrics, and Logs set the same value for `OtlpKeyValueTransformer.LogUnsupportedAttributeType` // and `ConfigurationExtensions.LogInvalidEnvironmentVariable` so it should be fine even if these exporters are used together. @@ -76,13 +81,14 @@ public OtlpLogExporter(OtlpExporterOptions options) } else { - this.exportClient = exporterOptions.GetLogExportClient(); + this.exportClient = exporterOptions!.GetLogExportClient(); } - this.otlpLogRecordTransformer = new OtlpLogRecordTransformer(sdkLimitOptions, new()); + this.otlpLogRecordTransformer = new OtlpLogRecordTransformer(sdkLimitOptions!, experimentalOptions!); } - internal OtlpResource.Resource ProcessResource => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); + internal OtlpResource.Resource ProcessResource + => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); /// public override ExportResult Export(in Batch logRecordBatch) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index 83bdd6907a..a73ae92178 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -14,8 +14,16 @@ // limitations under the License. // +#nullable enable + +using System.Diagnostics; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OpenTelemetry.Exporter; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; +using OpenTelemetry.Internal; namespace OpenTelemetry.Logs; @@ -31,7 +39,7 @@ public static class OtlpLogExporterHelperExtensions /// options to use. /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLoggerOptions loggerOptions) - => AddOtlpExporterInternal(loggerOptions, configure: null); + => AddOtlpExporter(loggerOptions, configure: null); /// /// Adds an OTLP Exporter to the OpenTelemetry . @@ -41,8 +49,22 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, - Action configure) - => AddOtlpExporterInternal(loggerOptions, configure); + Action? configure) + { + Guard.ThrowIfNull(loggerOptions); + + var name = Options.DefaultName; + + return loggerOptions.AddProcessor(sp => + { + var exporterOptions = sp.GetRequiredService>().Create(name); + var processorOptions = sp.GetRequiredService>().Get(name); + + configure?.Invoke(exporterOptions); + + return BuildOtlpLogExporter(sp, exporterOptions, processorOptions); + }); + } /// /// Adds an OTLP Exporter to the OpenTelemetry . @@ -52,29 +74,49 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, - Action configureExporterAndProcessor) + Action? configureExporterAndProcessor) { - var exporterOptions = new OtlpExporterOptions(); - var processorOptions = new LogRecordExportProcessorOptions(); + Guard.ThrowIfNull(loggerOptions); - configureExporterAndProcessor?.Invoke(exporterOptions, processorOptions); + var name = Options.DefaultName; + + return loggerOptions.AddProcessor(sp => + { + var exporterOptions = sp.GetRequiredService>().Create(name); + var processorOptions = sp.GetRequiredService>().Get(name); - return loggerOptions.AddProcessor(BuildOtlpLogExporter(exporterOptions, processorOptions)); + configureExporterAndProcessor?.Invoke(exporterOptions, processorOptions); + + return BuildOtlpLogExporter(sp, exporterOptions, processorOptions); + }); } internal static BaseProcessor BuildOtlpLogExporter( + IServiceProvider sp, OtlpExporterOptions exporterOptions, LogRecordExportProcessorOptions processorOptions, - Func, BaseExporter> configureExporterInstance = null) + Func, BaseExporter>? configureExporterInstance = null) { - BaseExporter otlpExporter = new OtlpLogExporter(exporterOptions); + Debug.Assert(sp != null, "sp was null"); + Debug.Assert(exporterOptions != null, "exporterOptions was null"); + Debug.Assert(processorOptions != null, "processorOptions was null"); + + var config = sp.GetRequiredService(); + + var sdkLimitOptions = new SdkLimitOptions(config); + var experimentalOptions = new ExperimentalOptions(config); + + BaseExporter otlpExporter = new OtlpLogExporter( + exporterOptions!, + sdkLimitOptions, + experimentalOptions); if (configureExporterInstance != null) { otlpExporter = configureExporterInstance(otlpExporter); } - if (processorOptions.ExportProcessorType == ExportProcessorType.Simple) + if (processorOptions!.ExportProcessorType == ExportProcessorType.Simple) { return new SimpleLogRecordExportProcessor(otlpExporter); } @@ -90,15 +132,4 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge batchOptions.MaxExportBatchSize); } } - - private static OpenTelemetryLoggerOptions AddOtlpExporterInternal( - OpenTelemetryLoggerOptions loggerOptions, - Action configure) - { - var exporterOptions = new OtlpExporterOptions(); - - configure?.Invoke(exporterOptions); - - return loggerOptions.AddProcessor(BuildOtlpLogExporter(exporterOptions, new())); - } } diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs index e40f4e1692..a046295827 100644 --- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs +++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerOptions.cs @@ -25,7 +25,7 @@ namespace OpenTelemetry.Logs; /// public class OpenTelemetryLoggerOptions { - internal readonly List> Processors = new(); + internal readonly List>> ProcessorFactories = new(); internal ResourceBuilder? ResourceBuilder; /// @@ -99,7 +99,22 @@ public OpenTelemetryLoggerOptions AddProcessor(BaseProcessor processo { Guard.ThrowIfNull(processor); - this.Processors.Add(processor); + this.ProcessorFactories.Add(_ => processor); + + return this; + } + + /// + /// Adds a processor to the provider which will be retrieved using dependency injection. + /// + /// The factory that creates the service. + /// Returns for chaining. + public OpenTelemetryLoggerOptions AddProcessor( + Func> implementationFactory) + { + Guard.ThrowIfNull(implementationFactory); + + this.ProcessorFactories.Add(implementationFactory); return this; } diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerProvider.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerProvider.cs index 3c99fdb82f..ec7369766c 100644 --- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerProvider.cs +++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggerProvider.cs @@ -61,9 +61,9 @@ public OpenTelemetryLoggerProvider(IOptionsMonitor o builder.SetResourceBuilder(optionsInstance.ResourceBuilder); } - foreach (var processor in optionsInstance.Processors) + foreach (var processorFactory in optionsInstance.ProcessorFactories) { - builder.AddProcessor(processor); + builder.AddProcessor(processorFactory); } }) .Build(); diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs index 5776241441..55f766ae35 100644 --- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs +++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs @@ -70,12 +70,12 @@ public static class OpenTelemetryLoggingExtensions options.ResourceBuilder = null; } - foreach (var processor in options.Processors) + foreach (var processorFactory in options.ProcessorFactories) { - logging.AddProcessor(processor); + logging.AddProcessor(processorFactory); } - options.Processors.Clear(); + options.ProcessorFactories.Clear(); }); builder.Services.TryAddEnumerable( diff --git a/src/OpenTelemetry/ProviderExtensions.cs b/src/OpenTelemetry/ProviderExtensions.cs index bf5a40a0e3..1bd963a6ed 100644 --- a/src/OpenTelemetry/ProviderExtensions.cs +++ b/src/OpenTelemetry/ProviderExtensions.cs @@ -14,6 +14,7 @@ // limitations under the License. // +using System.Diagnostics.CodeAnalysis; using OpenTelemetry.Logs; using OpenTelemetry.Metrics; using OpenTelemetry.Resources; @@ -31,7 +32,7 @@ public static class ProviderExtensions /// /// . /// if found otherwise . - public static Resource GetResource(this BaseProvider baseProvider) + public static Resource GetResource([AllowNull] this BaseProvider baseProvider) { if (baseProvider is TracerProviderSdk tracerProviderSdk) { @@ -58,14 +59,14 @@ public static Resource GetResource(this BaseProvider baseProvider) /// /// . /// if found otherwise . - public static Resource GetDefaultResource(this BaseProvider baseProvider) + public static Resource GetDefaultResource([AllowNull] this BaseProvider baseProvider) { var builder = ResourceBuilder.CreateDefault(); builder.ServiceProvider = GetServiceProvider(baseProvider); return builder.Build(); } - internal static IServiceProvider? GetServiceProvider(this BaseProvider baseProvider) + internal static IServiceProvider? GetServiceProvider(this BaseProvider? baseProvider) { if (baseProvider is TracerProviderSdk tracerProviderSdk) { diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs index e72b54bd3d..e292005a60 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs @@ -244,23 +244,25 @@ public void LogExportResultIsSuccess(OtlpExportProtocol protocol, string endpoin { builder .AddOpenTelemetry(options => options - .AddProcessor(OtlpLogExporterHelperExtensions.BuildOtlpLogExporter( - exporterOptions, - processorOptions, - configureExporterInstance: otlpExporter => - { - delegatingExporter = new DelegatingExporter + .AddProcessor(sp => + OtlpLogExporterHelperExtensions.BuildOtlpLogExporter( + sp, + exporterOptions, + processorOptions, + configureExporterInstance: otlpExporter => { - OnExportFunc = (batch) => + delegatingExporter = new DelegatingExporter { - var result = otlpExporter.Export(batch); - exportResults.Add(result); - handle.Set(); - return result; - }, - }; - return delegatingExporter; - }))); + OnExportFunc = (batch) => + { + var result = otlpExporter.Export(batch); + exportResults.Add(result); + handle.Set(); + return result; + }, + }; + return delegatingExporter; + }))); }); var logger = loggerFactory.CreateLogger("OtlpLogExporterTests"); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index 0c2e6c06f9..4c3f73f75f 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -611,9 +611,10 @@ public void Export_WhenExportClientIsProvidedInCtor_UsesProvidedExportClient() var emptyLogRecords = Array.Empty(); var emptyBatch = new Batch(emptyLogRecords, emptyLogRecords.Length); var sut = new OtlpLogExporter( - new OtlpExporterOptions(), - new SdkLimitOptions(), - fakeExportClient.Object); + new OtlpExporterOptions(), + new SdkLimitOptions(), + new ExperimentalOptions(), + fakeExportClient.Object); // Act. var result = sut.Export(emptyBatch); @@ -633,9 +634,10 @@ public void Export_WhenExportClientThrowsException_ReturnsExportResultFailure() .Setup(_ => _.SendExportRequest(It.IsAny(), default)) .Throws(new Exception("Test Exception")); var sut = new OtlpLogExporter( - new OtlpExporterOptions(), - new SdkLimitOptions(), - fakeExportClient.Object); + new OtlpExporterOptions(), + new SdkLimitOptions(), + new ExperimentalOptions(), + fakeExportClient.Object); // Act. var result = sut.Export(emptyBatch); @@ -655,9 +657,10 @@ public void Export_WhenExportIsSuccessful_ReturnsExportResultSuccess() .Setup(_ => _.SendExportRequest(It.IsAny(), default)) .Returns(true); var sut = new OtlpLogExporter( - new OtlpExporterOptions(), - new SdkLimitOptions(), - fakeExportClient.Object); + new OtlpExporterOptions(), + new SdkLimitOptions(), + new ExperimentalOptions(), + fakeExportClient.Object); // Act. var result = sut.Export(emptyBatch); From 78900431e439ac832135995366783a0ba9a1ce29 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 3 Oct 2023 15:26:00 -0700 Subject: [PATCH 02/24] Fix up public api files. --- .../Stable/net462/PublicAPI.Shipped.txt | 18 +++++++++--------- .../Stable/net6.0/PublicAPI.Shipped.txt | 18 +++++++++--------- .../netstandard2.0/PublicAPI.Shipped.txt | 18 +++++++++--------- .../netstandard2.1/PublicAPI.Shipped.txt | 18 +++++++++--------- .../Stable/net462/PublicAPI.Unshipped.txt | 1 + .../Stable/net6.0/PublicAPI.Unshipped.txt | 1 + .../netstandard2.0/PublicAPI.Unshipped.txt | 1 + .../netstandard2.1/PublicAPI.Unshipped.txt | 1 + 8 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt index 962432ef16..50eda9307d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net462/PublicAPI.Shipped.txt @@ -4,17 +4,17 @@ OpenTelemetry.Exporter.OtlpExporterOptions ~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol @@ -26,9 +26,9 @@ OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions ~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool ~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt index 962432ef16..50eda9307d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/net6.0/PublicAPI.Shipped.txt @@ -4,17 +4,17 @@ OpenTelemetry.Exporter.OtlpExporterOptions ~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol @@ -26,9 +26,9 @@ OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions ~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool ~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt index 962432ef16..50eda9307d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.0/PublicAPI.Shipped.txt @@ -4,17 +4,17 @@ OpenTelemetry.Exporter.OtlpExporterOptions ~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol @@ -26,9 +26,9 @@ OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions ~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool ~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt index 962432ef16..50eda9307d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/netstandard2.1/PublicAPI.Shipped.txt @@ -4,17 +4,17 @@ OpenTelemetry.Exporter.OtlpExporterOptions ~OpenTelemetry.Exporter.OtlpExporterOptions.BatchExportProcessorOptions.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri ~OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType -~OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType +OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string ~OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.get -> System.Func ~OpenTelemetry.Exporter.OtlpExporterOptions.HttpClientFactory.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol -~OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int -~OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.get -> OpenTelemetry.Exporter.OtlpExportProtocol +OpenTelemetry.Exporter.OtlpExporterOptions.Protocol.set -> void +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int +OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.Grpc = 0 -> OpenTelemetry.Exporter.OtlpExportProtocol OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf = 1 -> OpenTelemetry.Exporter.OtlpExportProtocol @@ -26,9 +26,9 @@ OpenTelemetry.Logs.OtlpLogExporterHelperExtensions OpenTelemetry.Metrics.OtlpMetricExporterExtensions OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions ~override OpenTelemetry.Exporter.OtlpMetricExporter.Export(in OpenTelemetry.Batch metrics) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMilliseconds) -> bool ~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult -~override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool +override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry/.publicApi/Stable/net462/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/Stable/net462/PublicAPI.Unshipped.txt index e69de29bb2..cf5d8ff05e 100644 --- a/src/OpenTelemetry/.publicApi/Stable/net462/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/net462/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(System.Func!>! implementationFactory) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry/.publicApi/Stable/net6.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/Stable/net6.0/PublicAPI.Unshipped.txt index e69de29bb2..cf5d8ff05e 100644 --- a/src/OpenTelemetry/.publicApi/Stable/net6.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/net6.0/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(System.Func!>! implementationFactory) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry/.publicApi/Stable/netstandard2.0/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/Stable/netstandard2.0/PublicAPI.Unshipped.txt index e69de29bb2..cf5d8ff05e 100644 --- a/src/OpenTelemetry/.publicApi/Stable/netstandard2.0/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/netstandard2.0/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(System.Func!>! implementationFactory) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry/.publicApi/Stable/netstandard2.1/PublicAPI.Unshipped.txt b/src/OpenTelemetry/.publicApi/Stable/netstandard2.1/PublicAPI.Unshipped.txt index e69de29bb2..cf5d8ff05e 100644 --- a/src/OpenTelemetry/.publicApi/Stable/netstandard2.1/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/netstandard2.1/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(System.Func!>! implementationFactory) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! From d5fe0701cf754d88a38996b35937f66fe6e3fa1c Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 3 Oct 2023 16:00:11 -0700 Subject: [PATCH 03/24] Fixes. --- .../ILogger/OpenTelemetryLoggingExtensions.cs | 10 +++-- .../OtlpLogExporterTests.cs | 45 ++++++++++++++++--- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs index 55f766ae35..fa14c17dd4 100644 --- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs +++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs @@ -55,10 +55,14 @@ public static class OpenTelemetryLoggingExtensions builder.AddConfiguration(); + var services = builder.Services; + // Note: This will bind logger options element (eg "Logging:OpenTelemetry") to OpenTelemetryLoggerOptions - RegisterLoggerProviderOptions(builder.Services); + RegisterLoggerProviderOptions(services); + + services.AddOpenTelemetrySharedProviderBuilderServices(); - new LoggerProviderBuilderBase(builder.Services).ConfigureBuilder( + new LoggerProviderBuilderBase(services).ConfigureBuilder( (sp, logging) => { var options = sp.GetRequiredService>().CurrentValue; @@ -78,7 +82,7 @@ public static class OpenTelemetryLoggingExtensions options.ProcessorFactories.Clear(); }); - builder.Services.TryAddEnumerable( + services.TryAddEnumerable( ServiceDescriptor.Singleton( sp => new OpenTelemetryLoggerProvider( sp.GetRequiredService(), diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index 4c3f73f75f..82a0d57437 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -21,6 +21,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Moq; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; @@ -1197,11 +1198,13 @@ public void AddOtlpLogExporterDefaultOptionsTest() options.AddOtlpExporter(); - var processors = (List>)typeof(OpenTelemetryLoggerOptions).GetField("Processors", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(options); + var provider = new OpenTelemetryLoggerProvider(new TestOptionsMonitor(options)); - Assert.Single(processors); + var processor = GetProcessor(provider); - var batchProcesor = processors[0] as BatchLogRecordExportProcessor; + Assert.NotNull(processor); + + var batchProcesor = processor as BatchLogRecordExportProcessor; Assert.NotNull(batchProcesor); @@ -1223,13 +1226,15 @@ public void AddOtlpLogExporterLogRecordProcessorOptionsTest(ExportProcessorType l.BatchExportProcessorOptions = new BatchExportLogRecordProcessorOptions() { ScheduledDelayMilliseconds = 1000 }; }); - var processors = (List>)typeof(OpenTelemetryLoggerOptions).GetField("Processors", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(options); + var provider = new OpenTelemetryLoggerProvider(new TestOptionsMonitor(options)); + + var processor = GetProcessor(provider); - Assert.Single(processors); + Assert.NotNull(processor); if (processorType == ExportProcessorType.Batch) { - var batchProcesor = processors[0] as BatchLogRecordExportProcessor; + var batchProcesor = processor as BatchLogRecordExportProcessor; Assert.NotNull(batchProcesor); @@ -1239,7 +1244,7 @@ public void AddOtlpLogExporterLogRecordProcessorOptionsTest(ExportProcessorType } else { - var simpleProcesor = processors[0] as SimpleLogRecordExportProcessor; + var simpleProcesor = processor as SimpleLogRecordExportProcessor; Assert.NotNull(simpleProcesor); } @@ -1249,4 +1254,30 @@ private static OtlpCommon.KeyValue TryGetAttribute(OtlpLogs.LogRecord record, st { return record.Attributes.FirstOrDefault(att => att.Key == key); } + + private static BaseProcessor GetProcessor(OpenTelemetryLoggerProvider provider) + { + var sdkProvider = typeof(OpenTelemetryLoggerProvider).GetField("Provider", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(provider); + + return (BaseProcessor)sdkProvider.GetType().GetProperty("Processor", BindingFlags.Instance | BindingFlags.Public).GetMethod.Invoke(sdkProvider, null); + } + + private sealed class TestOptionsMonitor : IOptionsMonitor + { + private readonly T instance; + + public TestOptionsMonitor(T instance) + { + this.instance = instance; + } + + public T CurrentValue => this.instance; + + public T Get(string name) => this.instance; + + public IDisposable OnChange(Action listener) + { + throw new NotImplementedException(); + } + } } From 53849379f1ed6260e0036b09af3318be3bd2fe2f Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Wed, 8 Nov 2023 11:51:25 -0800 Subject: [PATCH 04/24] api files --- .../.publicApi/Stable/PublicAPI.Unshipped.txt | 3 ++- src/OpenTelemetry/.publicApi/Stable/PublicAPI.Shipped.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt index 508ace4d8e..f4eda94c6e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt @@ -1,3 +1,4 @@ +#nullable enable OpenTelemetry.Exporter.OtlpLogExporter OpenTelemetry.Exporter.OtlpLogExporter.OtlpLogExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void -override OpenTelemetry.Exporter.OtlpLogExporter.Export(in OpenTelemetry.Batch logRecordBatch) -> OpenTelemetry.ExportResult \ No newline at end of file +override OpenTelemetry.Exporter.OtlpLogExporter.Export(in OpenTelemetry.Batch logRecordBatch) -> OpenTelemetry.ExportResult diff --git a/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Shipped.txt b/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Shipped.txt index ee99b01fee..77ed02bc8c 100644 --- a/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry/.publicApi/Stable/PublicAPI.Shipped.txt @@ -128,6 +128,7 @@ OpenTelemetry.Logs.LogRecordScope.LogRecordScope() -> void OpenTelemetry.Logs.LogRecordScope.Scope.get -> object? OpenTelemetry.Logs.OpenTelemetryLoggerOptions OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(OpenTelemetry.BaseProcessor! processor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +OpenTelemetry.Logs.OpenTelemetryLoggerOptions.AddProcessor(System.Func!>! implementationFactory) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! OpenTelemetry.Logs.OpenTelemetryLoggerOptions.IncludeFormattedMessage.get -> bool OpenTelemetry.Logs.OpenTelemetryLoggerOptions.IncludeFormattedMessage.set -> void OpenTelemetry.Logs.OpenTelemetryLoggerOptions.IncludeScopes.get -> bool From 594897c0771c44ec09fd888e95067e541f3a6de5 Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Wed, 8 Nov 2023 12:23:01 -0800 Subject: [PATCH 05/24] fix issue about null --- .../.publicApi/Stable/PublicAPI.Unshipped.txt | 4 ++-- .../OtlpLogExporter.cs | 2 +- .../OtlpLogExporterHelperExtensions.cs | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt index f4eda94c6e..134d8c9fd9 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt @@ -1,4 +1,4 @@ #nullable enable OpenTelemetry.Exporter.OtlpLogExporter -OpenTelemetry.Exporter.OtlpLogExporter.OtlpLogExporter(OpenTelemetry.Exporter.OtlpExporterOptions options) -> void -override OpenTelemetry.Exporter.OtlpLogExporter.Export(in OpenTelemetry.Batch logRecordBatch) -> OpenTelemetry.ExportResult +OpenTelemetry.Exporter.OtlpLogExporter.OtlpLogExporter(OpenTelemetry.Exporter.OtlpExporterOptions! options) -> void +override OpenTelemetry.Exporter.OtlpLogExporter.Export(in OpenTelemetry.Batch logRecordBatch) -> OpenTelemetry.ExportResult diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 12e710b5b1..af8f4274eb 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -96,7 +96,7 @@ public override ExportResult Export(in Batch logRecordBatch) // Prevents the exporter's gRPC and HTTP operations from being instrumented. using var scope = SuppressInstrumentationScope.Begin(); - OtlpCollector.ExportLogsServiceRequest request = null; + OtlpCollector.ExportLogsServiceRequest? request = null; try { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index a73ae92178..8d794e4cdd 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -97,7 +97,11 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge LogRecordExportProcessorOptions processorOptions, Func, BaseExporter>? configureExporterInstance = null) { - Debug.Assert(sp != null, "sp was null"); + if (sp == null) + { + throw new ArgumentNullException(nameof(sp)); + } + Debug.Assert(exporterOptions != null, "exporterOptions was null"); Debug.Assert(processorOptions != null, "processorOptions was null"); From 8a61c5aa0f1ecd0a9afb5685acc060fa0c6e6839 Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Thu, 9 Nov 2023 14:13:04 -0800 Subject: [PATCH 06/24] added some unit tests --- global.json | 2 +- .../IntegrationTest/IntegrationTests.cs | 10 +++-- .../Logs/OpenTelemetryLoggerProviderTests.cs | 45 +++++++++++++++++++ 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/global.json b/global.json index 16c870f7f4..27af8d6b9f 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { "rollForward": "latestFeature", - "version": "8.0.100-rc.2.23502.2" + "version": "8.0.100-rc.1.23463.5" } } diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs index e292005a60..f24829cd59 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs @@ -233,11 +233,13 @@ public void LogExportResultIsSuccess(OtlpExportProtocol protocol, string endpoin DelegatingExporter delegatingExporter = null; var exportResults = new List(); - var processorOptions = new LogRecordExportProcessorOptions(); - processorOptions.ExportProcessorType = exportProcessorType; - processorOptions.BatchExportProcessorOptions = new() + var processorOptions = new LogRecordExportProcessorOptions { - ScheduledDelayMilliseconds = ExportIntervalMilliseconds, + ExportProcessorType = exportProcessorType, + BatchExportProcessorOptions = new() + { + ScheduledDelayMilliseconds = ExportIntervalMilliseconds, + }, }; using var loggerFactory = LoggerFactory.Create(builder => diff --git a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs index a097f11b05..530fc752b9 100644 --- a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs +++ b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs @@ -15,7 +15,9 @@ // using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Moq; using Xunit; namespace OpenTelemetry.Logs.Tests; @@ -84,4 +86,47 @@ public void VerifyOptionsCannotBeChangedAfterInit(bool initialValue) Assert.Equal(initialValue, provider.Options.IncludeScopes); Assert.Equal(initialValue, provider.Options.ParseStateValues); } + + [Fact] + public void VerifyAddProcessorOverloadWithImplementationFactory() + { + // arrange + var options = new OpenTelemetryLoggerOptions(); + var myProcessor = new MyProcessor(); + var serviceProviderMock = new Mock(); + + serviceProviderMock.Setup(x => x.GetService(typeof(BaseProcessor))).Returns(myProcessor); + static BaseProcessor ImplementationFactory(IServiceProvider x) => x.GetService>(); + + // act + options.AddProcessor(ImplementationFactory); + + // assert + Assert.Single(options.ProcessorFactories); + var processorFactory = options.ProcessorFactories[0]; + var processor = processorFactory(serviceProviderMock.Object); + Assert.Equal(myProcessor, processor); + } + + [Fact] + public void VerifyExceptionIsThrownWhenImplementationFactoryIsNull() + { + // arrange + Func> implementationFactory = null; + var services = new ServiceCollection(); + services.AddLogging(logging => + logging.AddOpenTelemetry( + o => + o.AddProcessor(implementationFactory))); + + services.BuildServiceProvider(); + + // act + using var sp = services.BuildServiceProvider(); + + // assert + Assert.Throws(() => sp.GetRequiredService() as LoggerProviderSdk); + } + + internal class MyProcessor : BaseProcessor { } } From f0eb1254e173bfc24107035fe5d0c15830fb378b Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Thu, 9 Nov 2023 14:47:34 -0800 Subject: [PATCH 07/24] changelog and small fixes --- global.json | 2 +- .../CHANGELOG.md | 9 ++++++++- src/OpenTelemetry/CHANGELOG.md | 4 ++++ .../Logs/OpenTelemetryLoggerProviderTests.cs | 4 +++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/global.json b/global.json index 27af8d6b9f..16c870f7f4 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { "rollForward": "latestFeature", - "version": "8.0.100-rc.1.23463.5" + "version": "8.0.100-rc.2.23502.2" } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index c6c60e92cc..b8edcd61f7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -2,7 +2,14 @@ ## Unreleased -* Made `OpenTelemetry.Exporter.OtlpLogExporter` public. ([#4979](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4979)) +* Updated `AddOtlpExporter` function to use + `AddProcessor(Func> implementationFactory)` + overload for configuring `OpenTelemetryLoggerOptions` in OTLP log exporter + registration to support options being configured through `IConfiguration`. + ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) + +* Made `OpenTelemetry.Exporter.OtlpLogExporter` public. + ([#4979](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4979)) ## 1.7.0-alpha.1 diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index d95648b95e..656457b01c 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +* Added `AddProcessor` overload which exposes the factory pattern + `(Func> implementationFactory)`. + ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) + * Updated `Microsoft.Extensions.Logging` package version to `8.0.0-rc.2.23479.6`. ([#4959](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4959)) diff --git a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs index 530fc752b9..cfc3fa5fe1 100644 --- a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs +++ b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs @@ -128,5 +128,7 @@ public void VerifyExceptionIsThrownWhenImplementationFactoryIsNull() Assert.Throws(() => sp.GetRequiredService() as LoggerProviderSdk); } - internal class MyProcessor : BaseProcessor { } + private class MyProcessor : BaseProcessor + { + } } From 7f042e74fc578ca3bcd322ef910ea8d0478be773 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 10:44:47 -0800 Subject: [PATCH 08/24] CHANGELOG tweak. --- src/OpenTelemetry/CHANGELOG.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index 656457b01c..826b6bcf50 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -2,10 +2,6 @@ ## Unreleased -* Added `AddProcessor` overload which exposes the factory pattern - `(Func> implementationFactory)`. - ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) - * Updated `Microsoft.Extensions.Logging` package version to `8.0.0-rc.2.23479.6`. ([#4959](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4959)) @@ -41,6 +37,11 @@ `8.0.0-rc.2.23479.6`. ([#5020](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5020)) +* Added `AddProcessor` overload on `OpenTelemetryLoggerOptions` which exposes + the factory pattern `(Func> + implementationFactory)`. + ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) + ## 1.7.0-alpha.1 Released 2023-Oct-16 From 5ba704278df46ad96e5170bbefd8c006d52e6e45 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 10:50:53 -0800 Subject: [PATCH 09/24] XML comment tweak. --- .../Logs/ILogger/OpenTelemetryLoggingExtensions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs index fa14c17dd4..ee06910251 100644 --- a/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs +++ b/src/OpenTelemetry/Logs/ILogger/OpenTelemetryLoggingExtensions.cs @@ -41,9 +41,9 @@ public static class OpenTelemetryLoggingExtensions /// This is safe to be called multiple times and by library authors. /// Only a single will be created /// for a given . - /// / - /// features (DI, Options, IConfiguration, etc.) are not available when - /// using . + /// features available to metrics and + /// traces (for example the "ConfigureServices" extension) are NOT available + /// when using . /// /// /// The to use. From a2e935e9da9c3803a6a76ae98c9c4464ad3dc972 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 10:56:13 -0800 Subject: [PATCH 10/24] CHANGELOG tweak. --- .../CHANGELOG.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index b8edcd61f7..33ab39451c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -2,15 +2,15 @@ ## Unreleased -* Updated `AddOtlpExporter` function to use - `AddProcessor(Func> implementationFactory)` - overload for configuring `OpenTelemetryLoggerOptions` in OTLP log exporter - registration to support options being configured through `IConfiguration`. - ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) - * Made `OpenTelemetry.Exporter.OtlpLogExporter` public. ([#4979](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4979)) +* Updated the `OpenTelemetryLoggerOptions.AddOtlpExporter` extension to retrieve + `OtlpExporterOptions` and `LogRecordExportProcessorOptions` using the + `IServiceProvider` / Options API so that they can be controlled via + `IConfiguration` (similar to metrics and traces). + ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) + ## 1.7.0-alpha.1 Released 2023-Oct-16 From fd2d4b447509210fcb96ad02fb9dd43173aa7803 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 11:15:52 -0800 Subject: [PATCH 11/24] Support named options. --- .../.publicApi/Stable/PublicAPI.Unshipped.txt | 2 ++ .../OtlpLogExporterHelperExtensions.cs | 36 ++++++++++++++++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt index 134d8c9fd9..f90e2e4dfb 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Unshipped.txt @@ -2,3 +2,5 @@ OpenTelemetry.Exporter.OtlpLogExporter OpenTelemetry.Exporter.OtlpLogExporter.OtlpLogExporter(OpenTelemetry.Exporter.OtlpExporterOptions! options) -> void override OpenTelemetry.Exporter.OtlpLogExporter.Export(in OpenTelemetry.Batch logRecordBatch) -> OpenTelemetry.ExportResult +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, string? name, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, string? name, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index 8d794e4cdd..d5e2153091 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -39,7 +39,7 @@ public static class OtlpLogExporterHelperExtensions /// options to use. /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLoggerOptions loggerOptions) - => AddOtlpExporter(loggerOptions, configure: null); + => AddOtlpExporter(loggerOptions, name: null, configure: null); /// /// Adds an OTLP Exporter to the OpenTelemetry . @@ -50,15 +50,28 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, Action? configure) + => AddOtlpExporter(loggerOptions, name: null, configure); + + /// + /// Adds an OTLP Exporter to the OpenTelemetry . + /// + /// options to use. + /// Name which is used when retrieving options. + /// Callback action for configuring . + /// The instance of to chain the calls. + public static OpenTelemetryLoggerOptions AddOtlpExporter( + this OpenTelemetryLoggerOptions loggerOptions, + string? name, + Action? configure) { Guard.ThrowIfNull(loggerOptions); - var name = Options.DefaultName; + name ??= Options.DefaultName; return loggerOptions.AddProcessor(sp => { var exporterOptions = sp.GetRequiredService>().Create(name); - var processorOptions = sp.GetRequiredService>().Get(name); + var processorOptions = sp.GetRequiredService>().Create(name); configure?.Invoke(exporterOptions); @@ -75,15 +88,28 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, Action? configureExporterAndProcessor) + => AddOtlpExporter(loggerOptions, name: null, configureExporterAndProcessor); + + /// + /// Adds an OTLP Exporter to the OpenTelemetry . + /// + /// options to use. + /// Name which is used when retrieving options. + /// Callback action for configuring and . + /// The instance of to chain the calls. + public static OpenTelemetryLoggerOptions AddOtlpExporter( + this OpenTelemetryLoggerOptions loggerOptions, + string? name, + Action? configureExporterAndProcessor) { Guard.ThrowIfNull(loggerOptions); - var name = Options.DefaultName; + name ??= Options.DefaultName; return loggerOptions.AddProcessor(sp => { var exporterOptions = sp.GetRequiredService>().Create(name); - var processorOptions = sp.GetRequiredService>().Get(name); + var processorOptions = sp.GetRequiredService>().Create(name); configureExporterAndProcessor?.Invoke(exporterOptions, processorOptions); From 7ad1594e903d858ff6c8203905dc22d9a84e8560 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 11:28:35 -0800 Subject: [PATCH 12/24] Doc updates. --- .../README.md | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md index 94278f7a3d..69d9e23485 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md @@ -93,10 +93,29 @@ are ignored by exporter. Duplicate keys are exported as is. You can configure the `OtlpExporter` through `OtlpExporterOptions` and environment variables. -The `OtlpExporterOptions` type setters take precedence over the environment variables. -This can be achieved by providing an `Action` delegate to the -`AddOtlpExporter()` method or using `AddOptions()`. +> **Note** +> The `OtlpExporterOptions` type setters take precedence over the environment variables. + +This can be achieved by providing an `Action` delegate to +the `AddOtlpExporter()` method or using the `Configure()` +Options API extension. + +> **Note** +> The `OtlpExporterOptions` class is shared by logging, metrics, and tracing. To +> specify different settings for each signal use the `name` parameter on the +> `AddOtlpExporter` extensions: +> ```csharp +> appBuilder.Services.AddOpenTelemetry() +> .WithTracing(builder => builder.AddOtlpExporter("tracing", o => { })) +> .WithMetrics(builder => builder.AddOtlpExporter("metrics", o => { })); +> +> appBuilder.Logging.AddOpenTelemetry(builder => builder.AddOtlpExporter("logging", o => { })); +> +> appBuilder.Services.Configure("tracing", o => o.Endpoint = new("http://tracing_endpoint_here")); +> appBuilder.Services.Configure("metrics", o => o.Endpoint = new("http://metrics_endpoint_here")); +> appBuilder.Services.Configure("logging", o => o.Endpoint = new("http://logging_endpoint_here")); +> ``` If additional services from the dependency injection are required, they can be configured like this: @@ -109,7 +128,7 @@ services.AddOptions().Configure((opts, svc) => { TODO: Show metrics specific configuration (i.e MetricReaderOptions). -## OtlpExporterOptions +### OtlpExporterOptions * `Protocol`: OTLP transport protocol. Supported values: `OtlpExportProtocol.Grpc` and `OtlpExportProtocol.HttpProtobuf`. @@ -143,6 +162,24 @@ The following options are only applicable to `OtlpTraceExporter`: See the [`TestOtlpExporter.cs`](../../examples/Console/TestOtlpExporter.cs) for an example of how to use the exporter. +### LogRecordExportProcessorOptions + +The `LogRecordExportProcessorOptions` class may be used to configure processor & +batch settings for logging: + +```csharp +// Set via code: +appBuilder.Services.Configure(o => +{ + o.BatchExportProcessorOptions.ScheduledDelayMilliseconds = 2000; + o.BatchExportProcessorOptions.MaxExportBatchSize = 5000; +}); + +// Set via configuration: +appBuilder.Services.Configure( + appBuilder.Configuration.GetSection("OpenTelemetry:Logging")); +``` + ## Environment Variables The following environment variables can be used to override the default From 0b024df87f7f9f0da8795ca5971920772acbcd44 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 12:44:57 -0800 Subject: [PATCH 13/24] Lint. --- src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md index 69d9e23485..749140cef7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md @@ -105,6 +105,7 @@ Options API extension. > The `OtlpExporterOptions` class is shared by logging, metrics, and tracing. To > specify different settings for each signal use the `name` parameter on the > `AddOtlpExporter` extensions: +> > ```csharp > appBuilder.Services.AddOpenTelemetry() > .WithTracing(builder => builder.AddOtlpExporter("tracing", o => { })) From afea760dc8c2fa2cb1b4379cf2c2ffcd476d2c19 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 13:11:51 -0800 Subject: [PATCH 14/24] Tweaks and nullable decorations. --- .../.publicApi/Stable/PublicAPI.Shipped.txt | 20 +++++------ .../OtlpLogExporterHelperExtensions.cs | 12 +++---- .../OtlpMetricExporterExtensions.cs | 36 ++++++++++--------- .../OtlpTraceExporterHelperExtensions.cs | 12 ++++--- .../README.md | 8 ++--- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Shipped.txt index 50eda9307d..cd9c686fd1 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/.publicApi/Stable/PublicAPI.Shipped.txt @@ -30,13 +30,13 @@ override OpenTelemetry.Exporter.OtlpMetricExporter.OnShutdown(int timeoutMillise ~override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch activityBatch) -> OpenTelemetry.ExportResult override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! -static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action? configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! -~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder) -> OpenTelemetry.Metrics.MeterProviderBuilder -~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, string name, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder -~static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder builder, System.Action configureExporter) -> OpenTelemetry.Metrics.MeterProviderBuilder -~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder -~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -~static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action! configureExporterAndProcessor) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Logs.OtlpLogExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Logs.OpenTelemetryLoggerOptions! loggerOptions, System.Action! configure) -> OpenTelemetry.Logs.OpenTelemetryLoggerOptions! +static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder! builder) -> OpenTelemetry.Metrics.MeterProviderBuilder! +static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder! builder, string? name, System.Action? configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder! +static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder! builder, string? name, System.Action? configure) -> OpenTelemetry.Metrics.MeterProviderBuilder! +static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder! builder, System.Action! configureExporterAndMetricReader) -> OpenTelemetry.Metrics.MeterProviderBuilder! +static OpenTelemetry.Metrics.OtlpMetricExporterExtensions.AddOtlpExporter(this OpenTelemetry.Metrics.MeterProviderBuilder! builder, System.Action! configure) -> OpenTelemetry.Metrics.MeterProviderBuilder! +static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder! +static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, string? name, System.Action? configure) -> OpenTelemetry.Trace.TracerProviderBuilder! +static OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions.AddOtlpExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Action! configure) -> OpenTelemetry.Trace.TracerProviderBuilder! diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index d5e2153091..039650443d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -49,15 +49,15 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, - Action? configure) + Action configure) => AddOtlpExporter(loggerOptions, name: null, configure); /// /// Adds an OTLP Exporter to the OpenTelemetry . /// /// options to use. - /// Name which is used when retrieving options. - /// Callback action for configuring . + /// Optional name which is used when retrieving options. + /// Optional callback action for configuring . /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, @@ -87,15 +87,15 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, - Action? configureExporterAndProcessor) + Action configureExporterAndProcessor) => AddOtlpExporter(loggerOptions, name: null, configureExporterAndProcessor); /// /// Adds an OTLP Exporter to the OpenTelemetry . /// /// options to use. - /// Name which is used when retrieving options. - /// Callback action for configuring and . + /// Optional name which is used when retrieving options. + /// Optional callback action for configuring and . /// The instance of to chain the calls. public static OpenTelemetryLoggerOptions AddOtlpExporter( this OpenTelemetryLoggerOptions loggerOptions, diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 6150b58b91..479c07a820 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -14,6 +14,8 @@ // limitations under the License. // +#nullable enable + using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -35,28 +37,28 @@ public static class OtlpMetricExporterExtensions /// builder to use. /// The instance of to chain the calls. public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder builder) - => AddOtlpExporter(builder, name: null, configureExporter: null); + => AddOtlpExporter(builder, name: null, configure: null); /// /// Adds to the . /// /// builder to use. - /// Callback action for configuring . + /// Callback action for configuring . /// The instance of to chain the calls. - public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder builder, Action configureExporter) - => AddOtlpExporter(builder, name: null, configureExporter); + public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder builder, Action configure) + => AddOtlpExporter(builder, name: null, configure); /// /// Adds to the . /// /// builder to use. - /// Name which is used when retrieving options. - /// Callback action for configuring . + /// Optional name which is used when retrieving options. + /// Optional callback action for configuring . /// The instance of to chain the calls. public static MeterProviderBuilder AddOtlpExporter( this MeterProviderBuilder builder, - string name, - Action configureExporter) + string? name, + Action? configure) { Guard.ThrowIfNull(builder); @@ -64,11 +66,11 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui builder.ConfigureServices(services => { - if (name != null && configureExporter != null) + if (name != null && configure != null) { // If we are using named options we register the // configuration delegate into options pipeline. - services.Configure(finalOptionsName, configureExporter); + services.Configure(finalOptionsName, configure); } OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); @@ -99,7 +101,7 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); // Configuration delegate is executed inline on the fresh instance. - configureExporter?.Invoke(exporterOptions); + configure?.Invoke(exporterOptions); } else { @@ -132,15 +134,15 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui /// Adds to the . /// /// builder to use. - /// Name which is used when retrieving options. - /// Callback action for - /// configuring and Optional name which is used when retrieving options. + /// Optional callback action + /// for configuring and . /// The instance of to chain the calls. public static MeterProviderBuilder AddOtlpExporter( this MeterProviderBuilder builder, - string name, - Action configureExporterAndMetricReader) + string? name, + Action? configureExporterAndMetricReader) { Guard.ThrowIfNull(builder); @@ -177,7 +179,7 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui OtlpExporterOptions exporterOptions, MetricReaderOptions metricReaderOptions, IServiceProvider serviceProvider, - Func, BaseExporter> configureExporterInstance = null) + Func, BaseExporter>? configureExporterInstance = null) { exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpMetricExporter"); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs index b25b5e847f..bb7c25ce57 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs @@ -14,6 +14,8 @@ // limitations under the License. // +#nullable enable + using System.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -49,13 +51,13 @@ public static TracerProviderBuilder AddOtlpExporter(this TracerProviderBuilder b /// Adds OpenTelemetry Protocol (OTLP) exporter to the TracerProvider. /// /// builder to use. - /// Name which is used when retrieving options. - /// Callback action for configuring . + /// Optional name which is used when retrieving options. + /// Optional callback action for configuring . /// The instance of to chain the calls. public static TracerProviderBuilder AddOtlpExporter( this TracerProviderBuilder builder, - string name, - Action configure) + string? name, + Action? configure) { Guard.ThrowIfNull(builder); @@ -111,7 +113,7 @@ public static TracerProviderBuilder AddOtlpExporter(this TracerProviderBuilder b OtlpExporterOptions exporterOptions, SdkLimitOptions sdkLimitOptions, IServiceProvider serviceProvider, - Func, BaseExporter> configureExporterInstance = null) + Func, BaseExporter>? configureExporterInstance = null) { exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpTraceExporter"); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md index 749140cef7..2de8314125 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md @@ -105,13 +105,13 @@ Options API extension. > The `OtlpExporterOptions` class is shared by logging, metrics, and tracing. To > specify different settings for each signal use the `name` parameter on the > `AddOtlpExporter` extensions: -> +> > ```csharp > appBuilder.Services.AddOpenTelemetry() -> .WithTracing(builder => builder.AddOtlpExporter("tracing", o => { })) -> .WithMetrics(builder => builder.AddOtlpExporter("metrics", o => { })); +> .WithTracing(builder => builder.AddOtlpExporter("tracing", configure: null)) +> .WithMetrics(builder => builder.AddOtlpExporter("metrics", configure: null)); > -> appBuilder.Logging.AddOpenTelemetry(builder => builder.AddOtlpExporter("logging", o => { })); +> appBuilder.Logging.AddOpenTelemetry(builder => builder.AddOtlpExporter("logging", configure: null)); > > appBuilder.Services.Configure("tracing", o => o.Endpoint = new("http://tracing_endpoint_here")); > appBuilder.Services.Configure("metrics", o => o.Endpoint = new("http://metrics_endpoint_here")); From 8cd1574fd783f8ed7f756808392b12ba4508ea61 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 13:16:05 -0800 Subject: [PATCH 15/24] Lint. --- src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md index 2de8314125..ff8929c3af 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md @@ -110,9 +110,9 @@ Options API extension. > appBuilder.Services.AddOpenTelemetry() > .WithTracing(builder => builder.AddOtlpExporter("tracing", configure: null)) > .WithMetrics(builder => builder.AddOtlpExporter("metrics", configure: null)); -> +> > appBuilder.Logging.AddOpenTelemetry(builder => builder.AddOtlpExporter("logging", configure: null)); -> +> > appBuilder.Services.Configure("tracing", o => o.Endpoint = new("http://tracing_endpoint_here")); > appBuilder.Services.Configure("metrics", o => o.Endpoint = new("http://metrics_endpoint_here")); > appBuilder.Services.Configure("logging", o => o.Endpoint = new("http://logging_endpoint_here")); From cb1da675f473aa3795cf732069520545546279b8 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Mon, 13 Nov 2023 16:07:09 -0800 Subject: [PATCH 16/24] Code review. --- src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index 33ab39451c..71559a538c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -11,6 +11,10 @@ `IConfiguration` (similar to metrics and traces). ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) +* Added an `OpenTelemetryLoggerOptions.AddOtlpExporter` extension overload which + accepts a `name` parameter to support named options. + ([#4916](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4916)) + ## 1.7.0-alpha.1 Released 2023-Oct-16 From 6fc8cca2d436106595821717eb08dda8ec786abb Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 14 Nov 2023 10:24:08 -0800 Subject: [PATCH 17/24] Tweaks. --- .../OtlpLogExporterHelperExtensions.cs | 38 ++++++++++++++++--- .../OtlpMetricExporterExtensions.cs | 21 ++++++++-- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index 039650443d..fe3cdd9200 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -66,12 +66,25 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge { Guard.ThrowIfNull(loggerOptions); - name ??= Options.DefaultName; + var finalOptionsName = name ?? Options.DefaultName; return loggerOptions.AddProcessor(sp => { - var exporterOptions = sp.GetRequiredService>().Create(name); - var processorOptions = sp.GetRequiredService>().Create(name); + OtlpExporterOptions exporterOptions; + if (name == null) + { + // If we are NOT using named options we create a new + // instance always. The reason for this is + // OtlpExporterOptions is shared by all signals. Without a + // name, delegates for all signals will mix together. + exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); + } + else + { + exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); + } + + var processorOptions = sp.GetRequiredService>().Get(finalOptionsName); configure?.Invoke(exporterOptions); @@ -104,12 +117,25 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge { Guard.ThrowIfNull(loggerOptions); - name ??= Options.DefaultName; + var finalOptionsName = name ?? Options.DefaultName; return loggerOptions.AddProcessor(sp => { - var exporterOptions = sp.GetRequiredService>().Create(name); - var processorOptions = sp.GetRequiredService>().Create(name); + OtlpExporterOptions exporterOptions; + if (name == null) + { + // If we are NOT using named options we create a new + // instance always. The reason for this is + // OtlpExporterOptions is shared by all signals. Without a + // name, delegates for all signals will mix together. + exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); + } + else + { + exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); + } + + var processorOptions = sp.GetRequiredService>().Get(finalOptionsName); configureExporterAndProcessor?.Invoke(exporterOptions, processorOptions); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 479c07a820..7c7b08260b 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -146,13 +146,13 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui { Guard.ThrowIfNull(builder); - name ??= Options.DefaultName; + var finalOptionsName = name ?? Options.DefaultName; builder.ConfigureServices(services => { OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); - services.AddOptions(name).Configure( + services.AddOptions(finalOptionsName).Configure( (readerOptions, config) => { var otlpTemporalityPreference = config[OtlpMetricExporterTemporalityPreferenceEnvVarKey]; @@ -166,8 +166,21 @@ public static MeterProviderBuilder AddOtlpExporter(this MeterProviderBuilder bui return builder.AddReader(sp => { - var exporterOptions = sp.GetRequiredService>().Get(name); - var metricReaderOptions = sp.GetRequiredService>().Get(name); + OtlpExporterOptions exporterOptions; + if (name == null) + { + // If we are NOT using named options we create a new + // instance always. The reason for this is + // OtlpExporterOptions is shared by all signals. Without a + // name, delegates for all signals will mix together. + exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); + } + else + { + exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); + } + + var metricReaderOptions = sp.GetRequiredService>().Get(finalOptionsName); configureExporterAndMetricReader?.Invoke(exporterOptions, metricReaderOptions); From 97e31a26da4e6b298546c61cae0cc52cae4ef5f1 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Tue, 14 Nov 2023 16:21:55 -0800 Subject: [PATCH 18/24] Bug fixes and tests. --- .../OtlpExporterOptions.cs | 13 ++-- .../OtlpLogExporterHelperExtensions.cs | 63 ++++++++++-------- .../OtlpLogExporterTests.cs | 66 +++++++++++++++++++ 3 files changed, 112 insertions(+), 30 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs index f8669fc1dd..d08fc4037d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs @@ -199,12 +199,17 @@ public Uri Endpoint internal static void RegisterOtlpExporterOptionsFactory(IServiceCollection services) { - services.RegisterOptionsFactory( - (sp, configuration, name) => new OtlpExporterOptions( - configuration, - sp.GetRequiredService>().Get(name))); + services.RegisterOptionsFactory(CreateOtlpExporterOptions); } + internal static OtlpExporterOptions CreateOtlpExporterOptions( + IServiceProvider serviceProvider, + IConfiguration configuration, + string name) + => new( + configuration, + serviceProvider.GetRequiredService>().Get(name)); + private static string GetUserAgentString() { try diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index fe3cdd9200..f07aec4341 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -70,19 +70,7 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge return loggerOptions.AddProcessor(sp => { - OtlpExporterOptions exporterOptions; - if (name == null) - { - // If we are NOT using named options we create a new - // instance always. The reason for this is - // OtlpExporterOptions is shared by all signals. Without a - // name, delegates for all signals will mix together. - exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); - } - else - { - exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); - } + var exporterOptions = GetOtlpExporterOptions(sp, name, finalOptionsName); var processorOptions = sp.GetRequiredService>().Get(finalOptionsName); @@ -121,19 +109,7 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge return loggerOptions.AddProcessor(sp => { - OtlpExporterOptions exporterOptions; - if (name == null) - { - // If we are NOT using named options we create a new - // instance always. The reason for this is - // OtlpExporterOptions is shared by all signals. Without a - // name, delegates for all signals will mix together. - exporterOptions = sp.GetRequiredService>().Create(finalOptionsName); - } - else - { - exporterOptions = sp.GetRequiredService>().Get(finalOptionsName); - } + var exporterOptions = GetOtlpExporterOptions(sp, name, finalOptionsName); var processorOptions = sp.GetRequiredService>().Get(finalOptionsName); @@ -188,4 +164,39 @@ public static OpenTelemetryLoggerOptions AddOtlpExporter(this OpenTelemetryLogge batchOptions.MaxExportBatchSize); } } + + private static OtlpExporterOptions GetOtlpExporterOptions(IServiceProvider sp, string? name, string finalName) + { + // Note: If OtlpExporter has been registered for tracing and/or metrics + // then IOptionsFactory will be set by a call to + // OtlpExporterOptions.RegisterOtlpExporterOptionsFactory. However if we + // are only using logging we don't have an opportunity to do that + // registration so we manually create a factory. + + var optionsFactory = sp.GetRequiredService>(); + if (optionsFactory is not DelegatingOptionsFactory) + { + optionsFactory = new DelegatingOptionsFactory( + (c, n) => OtlpExporterOptions.CreateOtlpExporterOptions(sp, c, n), + sp.GetRequiredService(), + sp.GetServices>(), + sp.GetServices>(), + sp.GetServices>()); + + return optionsFactory.Create(finalName); + } + + if (name == null) + { + // If we are NOT using named options we create a new + // instance always. The reason for this is + // OtlpExporterOptions is shared by all signals. Without a + // name, delegates for all signals will mix together. + return optionsFactory.Create(finalName); + } + + // If we have a valid factory AND we are using named options, we can + // safely use the Options API fully. + return sp.GetRequiredService>().Get(finalName); + } } diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index df3e38c202..2ddbc6e0b6 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -1289,6 +1289,72 @@ public void ValidateInstrumentationScope() Assert.Empty(OtlpLogRecordTransformer.LogListPool); } + [Fact] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFactoryCreate() + { + var values = new Dictionary() + { + [OtlpExporterOptions.EndpointEnvVarName] = "http://test:8888", + }; + + var configuration = new ConfigurationBuilder() + .AddInMemoryCollection(values) + .Build(); + + var configureDelegateCalled = false; + + using var factory = LoggerFactory.Create(logging => + { + logging.Services.AddSingleton(configuration); + + logging.Services.Configure(o => + { + configureDelegateCalled = true; + Assert.Equal(new Uri("http://test:8888"), o.Endpoint); + }); + + logging.AddOpenTelemetry(o => o.AddOtlpExporter()); + }); + + Assert.True(configureDelegateCalled); + } + + [Fact] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBuilder() + { + var values = new Dictionary() + { + [OtlpExporterOptions.EndpointEnvVarName] = "http://test:8888", + }; + + var configuration = new ConfigurationBuilder() + .AddInMemoryCollection(values) + .Build(); + + var configureDelegateCalled = false; + + var services = new ServiceCollection(); + + services.AddSingleton(configuration); + + services.Configure(o => + { + configureDelegateCalled = true; + Assert.Equal(new Uri("http://test:8888"), o.Endpoint); + }); + + services.AddLogging( + logging => logging.AddOpenTelemetry(o => o.AddOtlpExporter())); + + using var sp = services.BuildServiceProvider(); + + var factory = sp.GetRequiredService(); + + Assert.NotNull(factory); + + Assert.True(configureDelegateCalled); + } + private static OtlpCommon.KeyValue TryGetAttribute(OtlpLogs.LogRecord record, string key) { return record.Attributes.FirstOrDefault(att => att.Key == key); From 6dc6f04f6c8bb40872829b1bba3dece59c4a81e8 Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Wed, 15 Nov 2023 11:52:39 -0800 Subject: [PATCH 19/24] addressed comment --- .../Logs/OpenTelemetryLoggerProviderTests.cs | 47 ------------------- .../OpenTelemetryLoggingExtensionsTests.cs | 46 ++++++++++++++++++ 2 files changed, 46 insertions(+), 47 deletions(-) diff --git a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs index cfc3fa5fe1..a097f11b05 100644 --- a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs +++ b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggerProviderTests.cs @@ -15,9 +15,7 @@ // using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Moq; using Xunit; namespace OpenTelemetry.Logs.Tests; @@ -86,49 +84,4 @@ public void VerifyOptionsCannotBeChangedAfterInit(bool initialValue) Assert.Equal(initialValue, provider.Options.IncludeScopes); Assert.Equal(initialValue, provider.Options.ParseStateValues); } - - [Fact] - public void VerifyAddProcessorOverloadWithImplementationFactory() - { - // arrange - var options = new OpenTelemetryLoggerOptions(); - var myProcessor = new MyProcessor(); - var serviceProviderMock = new Mock(); - - serviceProviderMock.Setup(x => x.GetService(typeof(BaseProcessor))).Returns(myProcessor); - static BaseProcessor ImplementationFactory(IServiceProvider x) => x.GetService>(); - - // act - options.AddProcessor(ImplementationFactory); - - // assert - Assert.Single(options.ProcessorFactories); - var processorFactory = options.ProcessorFactories[0]; - var processor = processorFactory(serviceProviderMock.Object); - Assert.Equal(myProcessor, processor); - } - - [Fact] - public void VerifyExceptionIsThrownWhenImplementationFactoryIsNull() - { - // arrange - Func> implementationFactory = null; - var services = new ServiceCollection(); - services.AddLogging(logging => - logging.AddOpenTelemetry( - o => - o.AddProcessor(implementationFactory))); - - services.BuildServiceProvider(); - - // act - using var sp = services.BuildServiceProvider(); - - // assert - Assert.Throws(() => sp.GetRequiredService() as LoggerProviderSdk); - } - - private class MyProcessor : BaseProcessor - { - } } diff --git a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs index e4b8a33f91..083cdaf501 100644 --- a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs +++ b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs @@ -129,4 +129,50 @@ public void TestTrimmingCorrectnessOfOpenTelemetryLoggerOptions() Assert.True(prop.PropertyType.IsPrimitive, $"Property OpenTelemetryLoggerOptions.{prop.Name} doesn't have a primitive type. This is potentially a trim compatibility issue."); } } + + [Fact] + public void VerifyAddProcessorOverloadWithImplementationFactory() + { + // arrange + var services = new ServiceCollection(); + services.AddSingleton(); + + var serviceCollection = services.AddLogging(logging => + logging.AddOpenTelemetry(options => + options.AddProcessor(sp => sp.GetRequiredService()))); + + // act + using var sp = services.BuildServiceProvider(); + + var loggerProvider = sp.GetRequiredService() as LoggerProviderSdk; + + // assert + Assert.NotNull(loggerProvider); + Assert.NotNull(loggerProvider.Processor); + Assert.True(loggerProvider.Processor is MyProcessor); + } + + [Fact] + public void VerifyExceptionIsThrownWhenImplementationFactoryIsNull() + { + // arrange + Func>? implementationFactory = null; + var services = new ServiceCollection(); +#pragma warning disable CS8604 // Suppressed possible null reference warning for testing argument null exception. + _ = services.AddLogging(logging => + logging.AddOpenTelemetry( + o => + o.AddProcessor(implementationFactory))); +#pragma warning restore CS8604 // Suppressed possible null reference warning for testing argument null exception. + + // act + using var sp = services.BuildServiceProvider(); + + // assert + Assert.Throws(() => sp.GetRequiredService() as LoggerProviderSdk); + } + + private class MyProcessor : BaseProcessor + { + } } From 3b00b5f22212ed12c5a95d35b56e0c4ac850579a Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Nov 2023 12:12:24 -0800 Subject: [PATCH 20/24] A bit of cleanup. --- .../Logs/OpenTelemetryLoggingExtensionsTests.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs index 083cdaf501..308062be65 100644 --- a/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs +++ b/test/OpenTelemetry.Tests/Logs/OpenTelemetryLoggingExtensionsTests.cs @@ -135,11 +135,12 @@ public void VerifyAddProcessorOverloadWithImplementationFactory() { // arrange var services = new ServiceCollection(); + services.AddSingleton(); - var serviceCollection = services.AddLogging(logging => - logging.AddOpenTelemetry(options => - options.AddProcessor(sp => sp.GetRequiredService()))); + services.AddLogging(logging => + logging.AddOpenTelemetry( + o => o.AddProcessor(sp => sp.GetRequiredService()))); // act using var sp = services.BuildServiceProvider(); @@ -156,14 +157,11 @@ public void VerifyAddProcessorOverloadWithImplementationFactory() public void VerifyExceptionIsThrownWhenImplementationFactoryIsNull() { // arrange - Func>? implementationFactory = null; var services = new ServiceCollection(); -#pragma warning disable CS8604 // Suppressed possible null reference warning for testing argument null exception. - _ = services.AddLogging(logging => + + services.AddLogging(logging => logging.AddOpenTelemetry( - o => - o.AddProcessor(implementationFactory))); -#pragma warning restore CS8604 // Suppressed possible null reference warning for testing argument null exception. + o => o.AddProcessor(implementationFactory: null!))); // act using var sp = services.BuildServiceProvider(); From fcd2dffb1dbef0a89634222daa3f407143befff7 Mon Sep 17 00:00:00 2001 From: Yun-Ting Date: Wed, 15 Nov 2023 15:32:18 -0800 Subject: [PATCH 21/24] add test paths for optional name --- .../OtlpLogExporterHelperExtensions.cs | 4 +- .../OtlpLogExporterTests.cs | 43 ++++++++++++++----- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index f07aec4341..49431a3b1a 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -169,8 +169,8 @@ private static OtlpExporterOptions GetOtlpExporterOptions(IServiceProvider sp, s { // Note: If OtlpExporter has been registered for tracing and/or metrics // then IOptionsFactory will be set by a call to - // OtlpExporterOptions.RegisterOtlpExporterOptionsFactory. However if we - // are only using logging we don't have an opportunity to do that + // OtlpExporterOptions.RegisterOtlpExporterOptionsFactory. However, if we + // are only using logging, we don't have an opportunity to do that // registration so we manually create a factory. var optionsFactory = sp.GetRequiredService>(); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index 2ddbc6e0b6..711a8571c2 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -1289,8 +1289,12 @@ public void ValidateInstrumentationScope() Assert.Empty(OtlpLogRecordTransformer.LogListPool); } - [Fact] - public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFactoryCreate() + [Theory] + [InlineData("logging", true)] + [InlineData("logging", false)] + [InlineData("tracing", true)] + [InlineData("tracing", false)] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFactoryCreate(string name, bool optionalNameMatch) { var values = new Dictionary() { @@ -1307,20 +1311,31 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFact { logging.Services.AddSingleton(configuration); - logging.Services.Configure(o => + logging.Services.Configure(name, o => { configureDelegateCalled = true; Assert.Equal(new Uri("http://test:8888"), o.Endpoint); }); - logging.AddOpenTelemetry(o => o.AddOtlpExporter()); + logging.AddOpenTelemetry(o => o.AddOtlpExporter(optionalNameMatch ? name : "otherSignalName", configure: null)); }); - Assert.True(configureDelegateCalled); + if (optionalNameMatch) + { + Assert.True(configureDelegateCalled); + } + else + { + Assert.False(configureDelegateCalled); + } } - [Fact] - public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBuilder() + [Theory] + [InlineData("logging", true)] + [InlineData("logging", false)] + [InlineData("tracing", true)] + [InlineData("tracing", false)] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBuilder(string name, bool optionalNameMatch) { var values = new Dictionary() { @@ -1337,14 +1352,15 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui services.AddSingleton(configuration); - services.Configure(o => + services.Configure(name, o => { configureDelegateCalled = true; Assert.Equal(new Uri("http://test:8888"), o.Endpoint); }); services.AddLogging( - logging => logging.AddOpenTelemetry(o => o.AddOtlpExporter())); + logging => logging.AddOpenTelemetry(o => + o.AddOtlpExporter(optionalNameMatch ? name : "otherSignalName", configure: null))); using var sp = services.BuildServiceProvider(); @@ -1352,7 +1368,14 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui Assert.NotNull(factory); - Assert.True(configureDelegateCalled); + if (optionalNameMatch) + { + Assert.True(configureDelegateCalled); + } + else + { + Assert.False(configureDelegateCalled); + } } private static OtlpCommon.KeyValue TryGetAttribute(OtlpLogs.LogRecord record, string key) From ae4d3f8bdd0e6d4b00faeb5281fbd03c93689b53 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Thu, 16 Nov 2023 13:42:05 -0800 Subject: [PATCH 22/24] Test refactor. --- .../OtlpLogExporterTests.cs | 129 ++++++++++-------- 1 file changed, 72 insertions(+), 57 deletions(-) diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index 711a8571c2..23b707ea81 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -1290,52 +1290,53 @@ public void ValidateInstrumentationScope() } [Theory] - [InlineData("logging", true)] - [InlineData("logging", false)] - [InlineData("tracing", true)] - [InlineData("tracing", false)] - public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFactoryCreate(string name, bool optionalNameMatch) + [InlineData(null)] + [InlineData("logging")] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggerFactoryCreate(string optionsName) { - var values = new Dictionary() - { - [OtlpExporterOptions.EndpointEnvVarName] = "http://test:8888", - }; - - var configuration = new ConfigurationBuilder() - .AddInMemoryCollection(values) - .Build(); + RunVerifyEnvironmentVariablesTakenFromIConfigurationTest( + optionsName, + configure => + { + var factory = LoggerFactory.Create(logging => + { + configure(logging.Services); - var configureDelegateCalled = false; + logging.AddOpenTelemetry(o => o.AddOtlpExporter(optionsName, configure: null)); + }); - using var factory = LoggerFactory.Create(logging => - { - logging.Services.AddSingleton(configuration); + return (factory, factory); + }); + } - logging.Services.Configure(name, o => + [Theory] + [InlineData(null)] + [InlineData("logging")] + public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBuilder(string optionsName) + { + RunVerifyEnvironmentVariablesTakenFromIConfigurationTest( + optionsName, + configure => { - configureDelegateCalled = true; - Assert.Equal(new Uri("http://test:8888"), o.Endpoint); - }); + var services = new ServiceCollection(); - logging.AddOpenTelemetry(o => o.AddOtlpExporter(optionalNameMatch ? name : "otherSignalName", configure: null)); - }); + configure(services); - if (optionalNameMatch) - { - Assert.True(configureDelegateCalled); - } - else - { - Assert.False(configureDelegateCalled); - } + services.AddLogging( + logging => logging.AddOpenTelemetry(o => + o.AddOtlpExporter(optionsName, configure: null))); + + var sp = services.BuildServiceProvider(); + + var factory = sp.GetRequiredService(); + + return (sp, factory); + }); } - [Theory] - [InlineData("logging", true)] - [InlineData("logging", false)] - [InlineData("tracing", true)] - [InlineData("tracing", false)] - public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBuilder(string name, bool optionalNameMatch) + private static void RunVerifyEnvironmentVariablesTakenFromIConfigurationTest( + string optionsName, + Func, (IDisposable Container, ILoggerFactory LoggerFactory)> createLoggerFactoryFunc) { var values = new Dictionary() { @@ -1347,35 +1348,49 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui .Build(); var configureDelegateCalled = false; + var tracingConfigureDelegateCalled = false; + var unnamedConfigureDelegateCalled = false; + var allConfigureDelegateCalled = false; - var services = new ServiceCollection(); + var testState = createLoggerFactoryFunc(services => + { + services.AddSingleton(configuration); - services.AddSingleton(configuration); + services.Configure(optionsName, o => + { + configureDelegateCalled = true; + Assert.Equal(new Uri("http://test:8888"), o.Endpoint); + }); - services.Configure(name, o => - { - configureDelegateCalled = true; - Assert.Equal(new Uri("http://test:8888"), o.Endpoint); - }); + services.Configure("tracing", o => + { + tracingConfigureDelegateCalled = true; + }); - services.AddLogging( - logging => logging.AddOpenTelemetry(o => - o.AddOtlpExporter(optionalNameMatch ? name : "otherSignalName", configure: null))); + services.Configure(o => + { + unnamedConfigureDelegateCalled = true; + }); - using var sp = services.BuildServiceProvider(); + services.ConfigureAll(o => + { + allConfigureDelegateCalled = true; + }); + }); + + using var container = testState.Container; - var factory = sp.GetRequiredService(); + var factory = testState.LoggerFactory; Assert.NotNull(factory); - if (optionalNameMatch) - { - Assert.True(configureDelegateCalled); - } - else - { - Assert.False(configureDelegateCalled); - } + Assert.True(configureDelegateCalled); + + Assert.False(tracingConfigureDelegateCalled); + + Assert.Equal(optionsName == null, unnamedConfigureDelegateCalled); + + Assert.True(allConfigureDelegateCalled); } private static OtlpCommon.KeyValue TryGetAttribute(OtlpLogs.LogRecord record, string key) From 87f6405aa62aecd6259ee28b91e265dd3563427d Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Thu, 16 Nov 2023 14:03:40 -0800 Subject: [PATCH 23/24] Test tweaks. --- .../OtlpLogExporterTests.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index 23b707ea81..090a950b75 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -1348,6 +1348,9 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui .Build(); var configureDelegateCalled = false; + var configureExportProcessorOptionsCalled = false; + var configureBatchOptionsCalled = false; + var tracingConfigureDelegateCalled = false; var unnamedConfigureDelegateCalled = false; var allConfigureDelegateCalled = false; @@ -1362,6 +1365,16 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui Assert.Equal(new Uri("http://test:8888"), o.Endpoint); }); + services.Configure(optionsName, o => + { + configureExportProcessorOptionsCalled = true; + }); + + services.Configure(optionsName, o => + { + configureBatchOptionsCalled = true; + }); + services.Configure("tracing", o => { tracingConfigureDelegateCalled = true; @@ -1385,6 +1398,8 @@ public void VerifyEnvironmentVariablesTakenFromIConfigurationWhenUsingLoggingBui Assert.NotNull(factory); Assert.True(configureDelegateCalled); + Assert.True(configureExportProcessorOptionsCalled); + Assert.True(configureBatchOptionsCalled); Assert.False(tracingConfigureDelegateCalled); From 532101fbb46f547dfdfa21d6c0abfdf8a3b2530d Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 22 Nov 2023 09:59:46 -0800 Subject: [PATCH 24/24] README tweaks. --- .../README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md index ff8929c3af..ab02f63cc1 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/README.md @@ -103,7 +103,7 @@ Options API extension. > **Note** > The `OtlpExporterOptions` class is shared by logging, metrics, and tracing. To -> specify different settings for each signal use the `name` parameter on the +> bind configuration specific to each signal use the `name` parameter on the > `AddOtlpExporter` extensions: > > ```csharp @@ -113,9 +113,9 @@ Options API extension. > > appBuilder.Logging.AddOpenTelemetry(builder => builder.AddOtlpExporter("logging", configure: null)); > -> appBuilder.Services.Configure("tracing", o => o.Endpoint = new("http://tracing_endpoint_here")); -> appBuilder.Services.Configure("metrics", o => o.Endpoint = new("http://metrics_endpoint_here")); -> appBuilder.Services.Configure("logging", o => o.Endpoint = new("http://logging_endpoint_here")); +> appBuilder.Services.Configure("tracing", appBuilder.Configuration.GetSection("OpenTelemetry:tracing:otlp")); +> appBuilder.Services.Configure("metrics", appBuilder.Configuration.GetSection("OpenTelemetry:metrics:otlp")); +> appBuilder.Services.Configure("logging", appBuilder.Configuration.GetSection("OpenTelemetry:logging:otlp")); > ``` If additional services from the dependency injection are required, they can be