From b4267c778401a6ae3c91ef256c6833ecb10b77d0 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Wed, 20 Apr 2022 19:37:48 -0700 Subject: [PATCH] OTLP LogExporter to enable ParseStateValues by default (#3186) --- .../OtlpLogExporterHelperExtensions.cs | 2 +- ...xporter.OpenTelemetryProtocol.Tests.csproj | 1 + .../OtlpLogExporterTests.cs | 83 +++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs index b99be335bac..354563fabd7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs/OtlpLogExporterHelperExtensions.cs @@ -42,7 +42,7 @@ private static OpenTelemetryLoggerOptions AddOtlpExporter(OpenTelemetryLoggerOpt { configure?.Invoke(exporterOptions); var otlpExporter = new OtlpLogExporter(exporterOptions); - + loggerOptions.ParseStateValues = true; if (exporterOptions.ExportProcessorType == ExportProcessorType.Simple) { return loggerOptions.AddProcessor(new SimpleLogRecordExportProcessor(otlpExporter)); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj index 78c69150b30..84deb4f7128 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj @@ -24,6 +24,7 @@ + diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index d9a6942fbea..0dbce41f836 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -17,6 +17,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Internal; @@ -30,6 +32,87 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests { public class OtlpLogExporterTests : Http2UnencryptedSupportTests { + [Fact] + public void AddOtlpLogExporterOptionstest() + { + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + var loggerOptions = new OpenTelemetryLoggerOptions(); + Assert.False(loggerOptions.ParseStateValues); + loggerOptions.AddOtlpExporter(); + Assert.True(loggerOptions.ParseStateValues); + } + + [Fact] + public void AddOtlpLogExporterSetsParseStateValueToTrue() + { + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + var logRecords = new List(); + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(logRecords); + options.AddOtlpExporter(); + }); + }); + + var logger = loggerFactory.CreateLogger("OtlpLogExporterTests"); + logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99); + Assert.Single(logRecords); + var logRecord = logRecords[0]; + Assert.Null(logRecord.State); + Assert.NotNull(logRecord.StateValues); + } + + [Fact] + public void AddOtlpLogExporterParseStateValueCanBeTurnedOff() + { + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + var logRecords = new List(); + using var loggerFactory = LoggerFactory.Create(builder => + { + builder.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(logRecords); + options.AddOtlpExporter(); + options.ParseStateValues = false; + }); + }); + + var logger = loggerFactory.CreateLogger("OtlpLogExporterTests"); + logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99); + Assert.Single(logRecords); + var logRecord = logRecords[0]; + Assert.NotNull(logRecord.State); + Assert.Null(logRecord.StateValues); + } + + [Fact] + public void AddOtlpLogExporterParseStateValueCanBeTurnedOffHosting() + { + var logRecords = new List(); + + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + var hostBuilder = new HostBuilder(); + hostBuilder.ConfigureLogging(logging => logging.AddOpenTelemetry(options => + { + options.AddInMemoryExporter(logRecords); + options.AddOtlpExporter(); + })); + + hostBuilder.ConfigureServices(services => + services.Configure(options => options.ParseStateValues = false)); + + var host = hostBuilder.Build(); + var loggerFactory = host.Services.GetService(); + var logger = loggerFactory.CreateLogger("OtlpLogExporterTests"); + logger.LogInformation("Hello from {name} {price}.", "tomato", 2.99); + Assert.Single(logRecords); + var logRecord = logRecords[0]; + Assert.NotNull(logRecord.State); + Assert.Null(logRecord.StateValues); + } + [Fact] public void OtlpLogRecordTestWhenStateValuesArePopulated() {