diff --git a/OpenTelemetry.sln b/OpenTelemetry.sln index b1bbdcad109..fe44303d234 100644 --- a/OpenTelemetry.sln +++ b/OpenTelemetry.sln @@ -275,7 +275,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A49299 src\Shared\SpanAttributeConstants.cs = src\Shared\SpanAttributeConstants.cs src\Shared\SpanHelper.cs = src\Shared\SpanHelper.cs src\Shared\StatusHelper.cs = src\Shared\StatusHelper.cs - src\Shared\TagAndValueTransformer.cs = src\Shared\TagAndValueTransformer.cs src\Shared\TagTransformer.cs = src\Shared\TagTransformer.cs src\Shared\TagTransformerJsonHelper.cs = src\Shared\TagTransformerJsonHelper.cs EndProjectSection diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleActivityExporter.cs b/src/OpenTelemetry.Exporter.Console/ConsoleActivityExporter.cs index c87a184d7ec..8c13ffed242 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleActivityExporter.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleActivityExporter.cs @@ -56,7 +56,7 @@ public override ExportResult Export(in Batch batch) continue; } - if (ConsoleTagTransformer.Instance.TryTransformTag(tag, out var result)) + if (this.TagTransformer.TryTransformTag(tag, out var result)) { this.WriteLine($" {result}"); } @@ -88,7 +88,7 @@ public override ExportResult Export(in Batch batch) this.WriteLine($" {activityEvent.Name} [{activityEvent.Timestamp}]"); foreach (ref readonly var attribute in activityEvent.EnumerateTagObjects()) { - if (ConsoleTagTransformer.Instance.TryTransformTag(attribute, out var result)) + if (this.TagTransformer.TryTransformTag(attribute, out var result)) { this.WriteLine($" {result}"); } @@ -104,7 +104,7 @@ public override ExportResult Export(in Batch batch) this.WriteLine($" {activityLink.Context.TraceId} {activityLink.Context.SpanId}"); foreach (ref readonly var attribute in activityLink.EnumerateTagObjects()) { - if (ConsoleTagTransformer.Instance.TryTransformTag(attribute, out var result)) + if (this.TagTransformer.TryTransformTag(attribute, out var result)) { this.WriteLine($" {result}"); } @@ -118,7 +118,7 @@ public override ExportResult Export(in Batch batch) this.WriteLine("Resource associated with Activity:"); foreach (var resourceAttribute in resource.Attributes) { - if (ConsoleTagTransformer.Instance.TryTransformTag(resourceAttribute, out var result)) + if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result)) { this.WriteLine($" {result}"); } diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleExporter.cs b/src/OpenTelemetry.Exporter.Console/ConsoleExporter.cs index 4806670a009..55df14f783f 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleExporter.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleExporter.cs @@ -11,12 +11,12 @@ public abstract class ConsoleExporter : BaseExporter protected ConsoleExporter(ConsoleExporterOptions options) { this.options = options ?? new ConsoleExporterOptions(); - ConsoleTagTransformer.LogUnsupportedAttributeType = (string tagValueType, string tagKey) => - { - this.WriteLine($"Unsupported attribute type {tagValueType} for {tagKey}."); - }; + + this.TagTransformer = new ConsoleTagTransformer(this.OnUnsupportedTagDropped); } + internal ConsoleTagTransformer TagTransformer { get; } + protected void WriteLine(string message) { if (this.options.Targets.HasFlag(ConsoleExporterOutputTargets.Console)) @@ -29,4 +29,11 @@ protected void WriteLine(string message) System.Diagnostics.Trace.WriteLine(message); } } + + private void OnUnsupportedTagDropped( + string tagKey, + string tagValueTypeFullName) + { + this.WriteLine($"Unsupported attribute value type '{tagValueTypeFullName}' for '{tagKey}'."); + } } diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleLogRecordExporter.cs b/src/OpenTelemetry.Exporter.Console/ConsoleLogRecordExporter.cs index 1baf208c811..3dff6a9bea0 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleLogRecordExporter.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleLogRecordExporter.cs @@ -93,7 +93,7 @@ public override ExportResult Export(in Batch batch) ? new KeyValuePair("OriginalFormat (a.k.a Body)", logRecord.Attributes[i].Value) : logRecord.Attributes[i]; - if (ConsoleTagTransformer.Instance.TryTransformTag(valueToTransform, out var result)) + if (this.TagTransformer.TryTransformTag(valueToTransform, out var result)) { this.WriteLine($"{string.Empty,-4}{result}"); } @@ -127,7 +127,7 @@ void ProcessScope(LogRecordScope scope, ConsoleLogRecordExporter exporter) foreach (KeyValuePair scopeItem in scope) { - if (ConsoleTagTransformer.Instance.TryTransformTag(scopeItem, out var result)) + if (this.TagTransformer.TryTransformTag(scopeItem, out var result)) { exporter.WriteLine($"[Scope.{scopeDepth}]:{result}"); } @@ -140,7 +140,7 @@ void ProcessScope(LogRecordScope scope, ConsoleLogRecordExporter exporter) this.WriteLine("\nResource associated with LogRecord:"); foreach (var resourceAttribute in resource.Attributes) { - if (ConsoleTagTransformer.Instance.TryTransformTag(resourceAttribute, out var result)) + if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result)) { this.WriteLine(result); } diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs b/src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs index f3f4b0ba5f9..b8e770c24ff 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs @@ -27,7 +27,7 @@ public override ExportResult Export(in Batch batch) this.WriteLine("Resource associated with Metric:"); foreach (var resourceAttribute in this.resource.Attributes) { - if (ConsoleTagTransformer.Instance.TryTransformTag(resourceAttribute, out var result)) + if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result)) { this.WriteLine($" {result}"); } @@ -67,7 +67,7 @@ public override ExportResult Export(in Batch batch) foreach (var meterTag in metric.MeterTags) { this.WriteLine("\tMeter Tags:"); - if (ConsoleTagTransformer.Instance.TryTransformTag(meterTag, out var result)) + if (this.TagTransformer.TryTransformTag(meterTag, out var result)) { this.WriteLine($"\t\t{result}"); } @@ -80,7 +80,7 @@ public override ExportResult Export(in Batch batch) StringBuilder tagsBuilder = new StringBuilder(); foreach (var tag in metricPoint.Tags) { - if (ConsoleTagTransformer.Instance.TryTransformTag(tag, out var result)) + if (this.TagTransformer.TryTransformTag(tag, out var result)) { tagsBuilder.Append(result); tagsBuilder.Append(' '); @@ -216,7 +216,7 @@ public override ExportResult Export(in Batch batch) bool appendedTagString = false; foreach (var tag in exemplar.FilteredTags) { - if (ConsoleTagTransformer.Instance.TryTransformTag(tag, out var result)) + if (this.TagTransformer.TryTransformTag(tag, out var result)) { if (!appendedTagString) { diff --git a/src/OpenTelemetry.Exporter.Console/ConsoleTagTransformer.cs b/src/OpenTelemetry.Exporter.Console/Implementation/ConsoleTagTransformer.cs similarity index 60% rename from src/OpenTelemetry.Exporter.Console/ConsoleTagTransformer.cs rename to src/OpenTelemetry.Exporter.Console/Implementation/ConsoleTagTransformer.cs index 308d2da6e1e..57ace36b352 100644 --- a/src/OpenTelemetry.Exporter.Console/ConsoleTagTransformer.cs +++ b/src/OpenTelemetry.Exporter.Console/Implementation/ConsoleTagTransformer.cs @@ -1,17 +1,23 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#nullable enable + +using System.Diagnostics; using OpenTelemetry.Internal; namespace OpenTelemetry.Exporter; internal sealed class ConsoleTagTransformer : TagTransformer { - private ConsoleTagTransformer() + private readonly Action onUnsupportedTagDropped; + + public ConsoleTagTransformer(Action onUnsupportedTagDropped) { - } + Debug.Assert(onUnsupportedTagDropped != null, "onUnsupportedTagDropped was null"); - public static ConsoleTagTransformer Instance { get; } = new(); + this.onUnsupportedTagDropped = onUnsupportedTagDropped!; + } protected override string TransformIntegralTag(string key, long value) => $"{key}: {value}"; @@ -23,4 +29,11 @@ private ConsoleTagTransformer() protected override string TransformArrayTag(string key, Array array) => this.TransformStringTag(key, TagTransformerJsonHelper.JsonSerializeArrayTag(array)); + + protected override void OnUnsupportedTagDropped( + string tagKey, + string tagValueTypeFullName) + { + this.onUnsupportedTagDropped(tagKey, tagValueTypeFullName); + } } diff --git a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj index 46fec7d5e99..f7b33738c30 100644 --- a/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj +++ b/src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj @@ -34,6 +34,7 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs index c99f0c2abde..688ccafbc5b 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs @@ -237,7 +237,7 @@ private static Span.Types.Link ToOtlpLink(in ActivityLink activityLink, SdkLimit int maxTags = sdkLimitOptions.SpanLinkAttributeCountLimit ?? int.MaxValue; foreach (ref readonly var tag in activityLink.EnumerateTagObjects()) { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(tag, out var attribute, sdkLimitOptions.AttributeValueLengthLimit)) + if (OtlpTagTransformer.Instance.TryTransformTag(tag, out var attribute, sdkLimitOptions.AttributeValueLengthLimit)) { if (otlpLink.Attributes.Count < maxTags) { @@ -265,7 +265,7 @@ private static Span.Types.Event ToOtlpEvent(in ActivityEvent activityEvent, SdkL int maxTags = sdkLimitOptions.SpanEventAttributeCountLimit ?? int.MaxValue; foreach (ref readonly var tag in activityEvent.EnumerateTagObjects()) { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(tag, out var attribute, sdkLimitOptions.AttributeValueLengthLimit)) + if (OtlpTagTransformer.Instance.TryTransformTag(tag, out var attribute, sdkLimitOptions.AttributeValueLengthLimit)) { if (otlpEvent.Attributes.Count < maxTags) { @@ -322,7 +322,7 @@ public void EnumerateTags(Activity activity, int maxTags) continue; } - if (OtlpKeyValueTransformer.Instance.TryTransformTag(tag, out var attribute, this.SdkLimitOptions.AttributeValueLengthLimit)) + if (OtlpTagTransformer.Instance.TryTransformTag(tag, out var attribute, this.SdkLimitOptions.AttributeValueLengthLimit)) { if (this.Span.Attributes.Count < maxTags) { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs index fb9266cb613..00336045576 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs @@ -416,7 +416,7 @@ internal static OtlpMetrics.Exemplar ToOtlpExemplar(T value, in Metrics.Exemp foreach (var tag in exemplar.FilteredTags) { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(tag, out var result)) + if (OtlpTagTransformer.Instance.TryTransformTag(tag, out var result)) { otlpExemplar.FilteredAttributes.Add(result); } @@ -429,7 +429,7 @@ private static void AddAttributes(ReadOnlyTagCollection tags, RepeatedField> { foreach (var tag in meterTags) { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(tag, out var result)) + if (OtlpTagTransformer.Instance.TryTransformTag(tag, out var result)) { attributes.Add(result); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpKeyValueTransformer.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpKeyValueTransformer.cs deleted file mode 100644 index 3f82c37573e..00000000000 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpKeyValueTransformer.cs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -using OpenTelemetry.Internal; -using OtlpCommon = OpenTelemetry.Proto.Common.V1; - -namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; - -internal sealed class OtlpKeyValueTransformer : TagAndValueTransformer -{ - private OtlpKeyValueTransformer() - { - } - - public static OtlpKeyValueTransformer Instance { get; } = new(); - - protected override OtlpCommon.KeyValue TransformIntegralTag(string key, long value) - { - return new OtlpCommon.KeyValue { Key = key, Value = this.TransformIntegralValue(value) }; - } - - protected override OtlpCommon.KeyValue TransformFloatingPointTag(string key, double value) - { - return new OtlpCommon.KeyValue { Key = key, Value = this.TransformFloatingPointValue(value) }; - } - - protected override OtlpCommon.KeyValue TransformBooleanTag(string key, bool value) - { - return new OtlpCommon.KeyValue { Key = key, Value = this.TransformBooleanValue(value) }; - } - - protected override OtlpCommon.KeyValue TransformStringTag(string key, string value) - { - return new OtlpCommon.KeyValue { Key = key, Value = this.TransformStringValue(value) }; - } - - protected override OtlpCommon.KeyValue TransformArrayTag(string key, Array array) - { - return new OtlpCommon.KeyValue { Key = key, Value = this.TransformArrayValue(array) }; - } - - protected override OtlpCommon.AnyValue TransformIntegralValue(long value) - { - return new OtlpCommon.AnyValue { IntValue = value }; - } - - protected override OtlpCommon.AnyValue TransformFloatingPointValue(double value) - { - return new OtlpCommon.AnyValue { DoubleValue = value }; - } - - protected override OtlpCommon.AnyValue TransformBooleanValue(bool value) - { - return new OtlpCommon.AnyValue { BoolValue = value }; - } - - protected override OtlpCommon.AnyValue TransformStringValue(string value) - { - return new OtlpCommon.AnyValue { StringValue = value }; - } - - protected override OtlpCommon.AnyValue TransformArrayValue(Array array) - { - var arrayValue = new OtlpCommon.ArrayValue(); - - foreach (var item in array) - { - try - { - var value = item != null ? this.TransformValue(item) : new OtlpCommon.AnyValue(); - arrayValue.Values.Add(value); - } - catch - { - return null; - } - } - - return new OtlpCommon.AnyValue { ArrayValue = arrayValue }; - } -} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpLogRecordTransformer.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpLogRecordTransformer.cs index 97be1c2d9f6..1071a2bf18e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpLogRecordTransformer.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpLogRecordTransformer.cs @@ -166,7 +166,7 @@ internal OtlpLogs.LogRecord ToOtlpLog(LogRecord logRecord) { otlpLogRecord.Body = new OtlpCommon.AnyValue { StringValue = attribute.Value as string }; } - else if (OtlpKeyValueTransformer.Instance.TryTransformTag(attribute, out var result, attributeValueLengthLimit)) + else if (OtlpTagTransformer.Instance.TryTransformTag(attribute, out var result, attributeValueLengthLimit)) { AddAttribute(otlpLogRecord, result, attributeCountLimit); } @@ -224,7 +224,7 @@ void ProcessScope(LogRecordScope scope, OtlpLogs.LogRecord otlpLog) } else { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(scopeItem, out var result, attributeValueLengthLimit)) + if (OtlpTagTransformer.Instance.TryTransformTag(scopeItem, out var result, attributeValueLengthLimit)) { AddAttribute(otlpLog, result, attributeCountLimit); } @@ -257,7 +257,7 @@ private static void AddAttribute(OtlpLogs.LogRecord logRecord, OtlpCommon.KeyVal private static void AddStringAttribute(OtlpLogs.LogRecord logRecord, string key, string value, int? maxValueLength, int maxAttributeCount) { var attributeItem = new KeyValuePair(key, value); - if (OtlpKeyValueTransformer.Instance.TryTransformTag(attributeItem, out var result, maxValueLength)) + if (OtlpTagTransformer.Instance.TryTransformTag(attributeItem, out var result, maxValueLength)) { AddAttribute(logRecord, result, maxAttributeCount); } @@ -267,7 +267,7 @@ private static void AddStringAttribute(OtlpLogs.LogRecord logRecord, string key, private static void AddIntAttribute(OtlpLogs.LogRecord logRecord, string key, int value, int maxAttributeCount) { var attributeItem = new KeyValuePair(key, value); - if (OtlpKeyValueTransformer.Instance.TryTransformTag(attributeItem, out var result)) + if (OtlpTagTransformer.Instance.TryTransformTag(attributeItem, out var result)) { AddAttribute(logRecord, result, maxAttributeCount); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpTagTransformer.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpTagTransformer.cs new file mode 100644 index 00000000000..386653d8fbf --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpTagTransformer.cs @@ -0,0 +1,118 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#nullable enable + +using System.Diagnostics; +using OpenTelemetry.Internal; +using OtlpCommon = OpenTelemetry.Proto.Common.V1; + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; + +internal sealed class OtlpTagTransformer : TagTransformer +{ + private OtlpTagTransformer() + { + } + + public static OtlpTagTransformer Instance { get; } = new(); + + protected override OtlpCommon.KeyValue TransformIntegralTag(string key, long value) + { + return new OtlpCommon.KeyValue { Key = key, Value = ToAnyValue(value) }; + } + + protected override OtlpCommon.KeyValue TransformFloatingPointTag(string key, double value) + { + return new OtlpCommon.KeyValue { Key = key, Value = ToAnyValue(value) }; + } + + protected override OtlpCommon.KeyValue TransformBooleanTag(string key, bool value) + { + return new OtlpCommon.KeyValue { Key = key, Value = ToAnyValue(value) }; + } + + protected override OtlpCommon.KeyValue TransformStringTag(string key, string value) + { + return new OtlpCommon.KeyValue { Key = key, Value = ToAnyValue(value) }; + } + + protected override OtlpCommon.KeyValue TransformArrayTag(string key, Array array) + { + var arrayValue = new OtlpCommon.ArrayValue(); + + foreach (var item in array) + { + arrayValue.Values.Add(ToAnyValue(item)); + } + + return new OtlpCommon.KeyValue { Key = key, Value = new OtlpCommon.AnyValue { ArrayValue = arrayValue } }; + } + + protected override void OnUnsupportedTagDropped( + string tagKey, + string tagValueTypeFullName) + { + OpenTelemetryProtocolExporterEventSource.Log.UnsupportedAttributeType( + tagValueTypeFullName, + tagKey); + } + + private static OtlpCommon.AnyValue ToAnyValue(long value) + => new() { IntValue = value }; + + private static OtlpCommon.AnyValue ToAnyValue(double value) + => new() { DoubleValue = value }; + + private static OtlpCommon.AnyValue ToAnyValue(bool value) + => new() { BoolValue = value }; + + private static OtlpCommon.AnyValue ToAnyValue(string value) + => new() { StringValue = value }; + + private static OtlpCommon.AnyValue ToAnyValue(object? value) + { + if (value == null) + { + return new(); + } + + return value switch + { + char => ToAnyValue(Convert.ToString(value)!), + string s => + /* Note: No need to call TruncateString here. That is taken care of + in base class via ConvertToStringArrayThenTransformArrayTag */ + ToAnyValue(s), + bool b => ToAnyValue(b), + byte b => ToAnyValue(b), + sbyte b => ToAnyValue(b), + short s => ToAnyValue(s), + ushort s => ToAnyValue(s), + int i => ToAnyValue(i), + uint i => ToAnyValue(i), + long l => ToAnyValue(l), + float f => ToAnyValue(f), + double d => ToAnyValue(d), + _ => DefaultCase(value), + }; + + static OtlpCommon.AnyValue DefaultCase(object value) + { + // Note: This should never be executed. In the base class the + // default case in TransformArrayTagInternal converts everything + // not explicitly supported to strings + + Debug.Fail("Default case executed"); + + var stringValue = Convert.ToString(value); + + if (stringValue == null) + { + return new(); + } + + return ToAnyValue(stringValue); + } + } +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ResourceExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ResourceExtensions.cs index 77c01c368ae..46158813ef6 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ResourceExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ResourceExtensions.cs @@ -15,7 +15,7 @@ public static OtlpResource.Resource ToOtlpResource(this Resource resource) foreach (KeyValuePair attribute in resource.Attributes) { - if (OtlpKeyValueTransformer.Instance.TryTransformTag(attribute, out var result)) + if (OtlpTagTransformer.Instance.TryTransformTag(attribute, out var result)) { processResource.Attributes.Add(result); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index f4de3db506a..8f89cb12514 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -28,7 +28,6 @@ -