Skip to content

Commit 49d70e0

Browse files
authored
[console] Switch to TagWriter for handling of tags/attributes (#5596)
1 parent ee5e1e0 commit 49d70e0

File tree

7 files changed

+104
-65
lines changed

7 files changed

+104
-65
lines changed

src/OpenTelemetry.Exporter.Console/ConsoleActivityExporter.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public override ExportResult Export(in Batch<Activity> batch)
6161
continue;
6262
}
6363

64-
if (this.TagTransformer.TryTransformTag(tag, out var result))
64+
if (this.TagWriter.TryTransformTag(tag, out var result))
6565
{
66-
this.WriteLine($" {result}");
66+
this.WriteLine($" {result.Key}: {result.Value}");
6767
}
6868
}
6969
}
@@ -93,9 +93,9 @@ public override ExportResult Export(in Batch<Activity> batch)
9393
this.WriteLine($" {activityEvent.Name} [{activityEvent.Timestamp}]");
9494
foreach (ref readonly var attribute in activityEvent.EnumerateTagObjects())
9595
{
96-
if (this.TagTransformer.TryTransformTag(attribute, out var result))
96+
if (this.TagWriter.TryTransformTag(attribute, out var result))
9797
{
98-
this.WriteLine($" {result}");
98+
this.WriteLine($" {result.Key}: {result.Value}");
9999
}
100100
}
101101
}
@@ -109,9 +109,9 @@ public override ExportResult Export(in Batch<Activity> batch)
109109
this.WriteLine($" {activityLink.Context.TraceId} {activityLink.Context.SpanId}");
110110
foreach (ref readonly var attribute in activityLink.EnumerateTagObjects())
111111
{
112-
if (this.TagTransformer.TryTransformTag(attribute, out var result))
112+
if (this.TagWriter.TryTransformTag(attribute, out var result))
113113
{
114-
this.WriteLine($" {result}");
114+
this.WriteLine($" {result.Key}: {result.Value}");
115115
}
116116
}
117117
}
@@ -123,9 +123,9 @@ public override ExportResult Export(in Batch<Activity> batch)
123123
this.WriteLine("Resource associated with Activity:");
124124
foreach (var resourceAttribute in resource.Attributes)
125125
{
126-
if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result))
126+
if (this.TagWriter.TryTransformTag(resourceAttribute, out var result))
127127
{
128-
this.WriteLine($" {result}");
128+
this.WriteLine($" {result.Key}: {result.Value}");
129129
}
130130
}
131131
}

src/OpenTelemetry.Exporter.Console/ConsoleExporter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ protected ConsoleExporter(ConsoleExporterOptions options)
1212
{
1313
this.options = options ?? new ConsoleExporterOptions();
1414

15-
this.TagTransformer = new ConsoleTagTransformer(this.OnUnsupportedTagDropped);
15+
this.TagWriter = new ConsoleTagWriter(this.OnUnsupportedTagDropped);
1616
}
1717

18-
internal ConsoleTagTransformer TagTransformer { get; }
18+
internal ConsoleTagWriter TagWriter { get; }
1919

2020
protected void WriteLine(string message)
2121
{

src/OpenTelemetry.Exporter.Console/ConsoleLogRecordExporter.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ public override ExportResult Export(in Batch<LogRecord> batch)
9393
? new KeyValuePair<string, object>("OriginalFormat (a.k.a Body)", logRecord.Attributes[i].Value)
9494
: logRecord.Attributes[i];
9595

96-
if (this.TagTransformer.TryTransformTag(valueToTransform, out var result))
96+
if (this.TagWriter.TryTransformTag(valueToTransform, out var result))
9797
{
98-
this.WriteLine($"{string.Empty,-4}{result}");
98+
this.WriteLine($"{string.Empty,-4}{result.Key}: {result.Value}");
9999
}
100100
}
101101
}
@@ -127,9 +127,9 @@ void ProcessScope(LogRecordScope scope, ConsoleLogRecordExporter exporter)
127127

128128
foreach (KeyValuePair<string, object> scopeItem in scope)
129129
{
130-
if (this.TagTransformer.TryTransformTag(scopeItem, out var result))
130+
if (this.TagWriter.TryTransformTag(scopeItem, out var result))
131131
{
132-
exporter.WriteLine($"[Scope.{scopeDepth}]:{result}");
132+
exporter.WriteLine($"[Scope.{scopeDepth}]:{result.Key}: {result.Value}");
133133
}
134134
}
135135
}
@@ -140,9 +140,9 @@ void ProcessScope(LogRecordScope scope, ConsoleLogRecordExporter exporter)
140140
this.WriteLine("\nResource associated with LogRecord:");
141141
foreach (var resourceAttribute in resource.Attributes)
142142
{
143-
if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result))
143+
if (this.TagWriter.TryTransformTag(resourceAttribute, out var result))
144144
{
145-
this.WriteLine(result);
145+
this.WriteLine($"{result.Key}: {result.Value}");
146146
}
147147
}
148148
}

src/OpenTelemetry.Exporter.Console/ConsoleMetricExporter.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ public override ExportResult Export(in Batch<Metric> batch)
2727
this.WriteLine("Resource associated with Metric:");
2828
foreach (var resourceAttribute in this.resource.Attributes)
2929
{
30-
if (this.TagTransformer.TryTransformTag(resourceAttribute, out var result))
30+
if (this.TagWriter.TryTransformTag(resourceAttribute, out var result))
3131
{
32-
this.WriteLine($" {result}");
32+
this.WriteLine($" {result.Key}: {result.Value}");
3333
}
3434
}
3535
}
@@ -67,9 +67,9 @@ public override ExportResult Export(in Batch<Metric> batch)
6767
foreach (var meterTag in metric.MeterTags)
6868
{
6969
this.WriteLine("\tMeter Tags:");
70-
if (this.TagTransformer.TryTransformTag(meterTag, out var result))
70+
if (this.TagWriter.TryTransformTag(meterTag, out var result))
7171
{
72-
this.WriteLine($"\t\t{result}");
72+
this.WriteLine($"\t\t{result.Key}: {result.Value}");
7373
}
7474
}
7575
}
@@ -80,9 +80,9 @@ public override ExportResult Export(in Batch<Metric> batch)
8080
StringBuilder tagsBuilder = new StringBuilder();
8181
foreach (var tag in metricPoint.Tags)
8282
{
83-
if (this.TagTransformer.TryTransformTag(tag, out var result))
83+
if (this.TagWriter.TryTransformTag(tag, out var result))
8484
{
85-
tagsBuilder.Append(result);
85+
tagsBuilder.Append($"{result.Key}: {result.Value}");
8686
tagsBuilder.Append(' ');
8787
}
8888
}
@@ -216,15 +216,15 @@ public override ExportResult Export(in Batch<Metric> batch)
216216
bool appendedTagString = false;
217217
foreach (var tag in exemplar.FilteredTags)
218218
{
219-
if (this.TagTransformer.TryTransformTag(tag, out var result))
219+
if (this.TagWriter.TryTransformTag(tag, out var result))
220220
{
221221
if (!appendedTagString)
222222
{
223223
exemplarString.Append(" Filtered Tags : ");
224224
appendedTagString = true;
225225
}
226226

227-
exemplarString.Append(result);
227+
exemplarString.Append($"{result.Key}: {result.Value}");
228228
exemplarString.Append(' ');
229229
}
230230
}

src/OpenTelemetry.Exporter.Console/Implementation/ConsoleTagTransformer.cs

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#nullable enable
5+
6+
using System.Diagnostics;
7+
using System.Text;
8+
using OpenTelemetry.Internal;
9+
10+
namespace OpenTelemetry.Exporter;
11+
12+
internal sealed class ConsoleTagWriter : JsonStringArrayTagWriter<ConsoleTagWriter.ConsoleTag>
13+
{
14+
private readonly Action<string, string> onUnsupportedTagDropped;
15+
16+
public ConsoleTagWriter(Action<string, string> onUnsupportedTagDropped)
17+
{
18+
Debug.Assert(onUnsupportedTagDropped != null, "onUnsupportedTagDropped was null");
19+
20+
this.onUnsupportedTagDropped = onUnsupportedTagDropped!;
21+
}
22+
23+
public bool TryTransformTag(KeyValuePair<string, object?> tag, out KeyValuePair<string, string> result)
24+
{
25+
ConsoleTag consoleTag = default;
26+
if (this.TryWriteTag(ref consoleTag, tag))
27+
{
28+
result = new KeyValuePair<string, string>(consoleTag.Key!, consoleTag.Value!);
29+
return true;
30+
}
31+
32+
result = default;
33+
return false;
34+
}
35+
36+
protected override void WriteIntegralTag(ref ConsoleTag consoleTag, string key, long value)
37+
{
38+
consoleTag.Key = key;
39+
consoleTag.Value = value.ToString();
40+
}
41+
42+
protected override void WriteFloatingPointTag(ref ConsoleTag consoleTag, string key, double value)
43+
{
44+
consoleTag.Key = key;
45+
consoleTag.Value = value.ToString();
46+
}
47+
48+
protected override void WriteBooleanTag(ref ConsoleTag consoleTag, string key, bool value)
49+
{
50+
consoleTag.Key = key;
51+
consoleTag.Value = value ? "true" : "false";
52+
}
53+
54+
protected override void WriteStringTag(ref ConsoleTag consoleTag, string key, string value)
55+
{
56+
consoleTag.Key = key;
57+
consoleTag.Value = value;
58+
}
59+
60+
protected override void WriteArrayTag(ref ConsoleTag consoleTag, string key, ArraySegment<byte> arrayUtf8JsonBytes)
61+
{
62+
consoleTag.Key = key;
63+
consoleTag.Value = Encoding.UTF8.GetString(arrayUtf8JsonBytes.Array!, 0, arrayUtf8JsonBytes.Count);
64+
}
65+
66+
protected override void OnUnsupportedTagDropped(
67+
string tagKey,
68+
string tagValueTypeFullName)
69+
{
70+
this.onUnsupportedTagDropped(tagKey, tagValueTypeFullName);
71+
}
72+
73+
internal struct ConsoleTag
74+
{
75+
public string? Key;
76+
77+
public string? Value;
78+
}
79+
}

src/OpenTelemetry.Exporter.Console/OpenTelemetry.Exporter.Console.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@
2626
<ItemGroup>
2727
<Compile Include="$(RepoRoot)\src\Shared\Metrics\Base2ExponentialBucketHistogramHelper.cs" Link="Includes\Metrics\Base2ExponentialBucketHistogramHelper.cs" />
2828
<Compile Include="$(RepoRoot)\src\Shared\PeriodicExportingMetricReaderHelper.cs" Link="Includes\PeriodicExportingMetricReaderHelper.cs" />
29-
<Compile Include="$(RepoRoot)\src\Shared\TagTransformer.cs" Link="Includes\TagTransformer.cs" />
30-
<Compile Include="$(RepoRoot)\src\Shared\TagTransformerJsonHelper.cs" Link="Includes\TagTransformerJsonHelper.cs" />
29+
<Compile Include="$(RepoRoot)\src\Shared\TagWriter\*.cs" Link="Includes\TagWriter\%(Filename).cs" />
3130
</ItemGroup>
3231

3332
</Project>

0 commit comments

Comments
 (0)