From 8d01ad241d05ee0d2bd32e4d9254b8b6534bb736 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Tue, 3 Oct 2023 13:18:46 +1000 Subject: [PATCH] Include trace and span ids in output --- .../serilog-extension-nuget.png | Bin .../Formatting/Compact/CompactJsonFormatter.cs | 15 +++++++++++++++ .../Compact/RenderedCompactJsonFormatter.cs | 15 +++++++++++++++ .../Serilog.Formatting.Compact.csproj | 7 +++++-- .../CompactJsonFormatterTests.cs | 17 +++++++++++++++++ 5 files changed, 52 insertions(+), 2 deletions(-) rename {src/Serilog.Formatting.Compact => assets}/serilog-extension-nuget.png (100%) diff --git a/src/Serilog.Formatting.Compact/serilog-extension-nuget.png b/assets/serilog-extension-nuget.png similarity index 100% rename from src/Serilog.Formatting.Compact/serilog-extension-nuget.png rename to assets/serilog-extension-nuget.png diff --git a/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs b/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs index 3a67c4b..992740c 100644 --- a/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs +++ b/src/Serilog.Formatting.Compact/Formatting/Compact/CompactJsonFormatter.cs @@ -19,6 +19,7 @@ using Serilog.Events; using Serilog.Formatting.Json; using Serilog.Parsing; +// ReSharper disable MemberCanBePrivate.Global namespace Serilog.Formatting.Compact { @@ -101,6 +102,20 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo JsonValueFormatter.WriteQuotedJsonString(logEvent.Exception.ToString(), output); } + if (logEvent.TraceId != null) + { + output.Write(",\"@tr\":\""); + output.Write(logEvent.TraceId.Value.ToHexString()); + output.Write('\"'); + } + + if (logEvent.SpanId != null) + { + output.Write(",\"@sp\":\""); + output.Write(logEvent.SpanId.Value.ToHexString()); + output.Write('\"'); + } + foreach (var property in logEvent.Properties) { var name = property.Key; diff --git a/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs b/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs index 4b37160..fbe0dd2 100644 --- a/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs +++ b/src/Serilog.Formatting.Compact/Formatting/Compact/RenderedCompactJsonFormatter.cs @@ -17,6 +17,7 @@ using System.IO; using Serilog.Events; using Serilog.Formatting.Json; +// ReSharper disable MemberCanBePrivate.Global namespace Serilog.Formatting.Compact { @@ -83,7 +84,21 @@ public static void FormatEvent(LogEvent logEvent, TextWriter output, JsonValueFo output.Write(",\"@x\":"); JsonValueFormatter.WriteQuotedJsonString(logEvent.Exception.ToString(), output); } + + if (logEvent.TraceId != null) + { + output.Write(",\"@tr\":\""); + output.Write(logEvent.TraceId.Value.ToHexString()); + output.Write('\"'); + } + if (logEvent.SpanId != null) + { + output.Write(",\"@sp\":\""); + output.Write(logEvent.SpanId.Value.ToHexString()); + output.Write('\"'); + } + foreach (var property in logEvent.Properties) { var name = property.Key; diff --git a/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj b/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj index baf24e6..167042a 100644 --- a/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj +++ b/src/Serilog.Formatting.Compact/Serilog.Formatting.Compact.csproj @@ -19,6 +19,8 @@ https://github.com/serilog/serilog-formatting-compact git 6.0-recommended + Serilog + README.md @@ -26,8 +28,9 @@ - - + + + diff --git a/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs b/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs index e5c06ba..bfc4371 100644 --- a/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs +++ b/test/Serilog.Formatting.Compact.Tests/CompactJsonFormatterTests.cs @@ -1,7 +1,11 @@ using System; +using System.Diagnostics; +using System.Linq; using Newtonsoft.Json.Linq; +using Serilog.Events; using Xunit; using Serilog.Formatting.Compact.Tests.Support; +using Serilog.Parsing; namespace Serilog.Formatting.Compact.Tests @@ -77,5 +81,18 @@ public void TimestampIsUtc() Assert.True(jobject.TryGetValue("@t", out val)); Assert.EndsWith("Z", val.ToObject()); } + + [Fact] + public void TraceAndSpanIdsGenerateValidJson() + { + var traceId = ActivityTraceId.CreateRandom(); + var spanId = ActivitySpanId.CreateRandom(); + var evt = new LogEvent(DateTimeOffset.Now, LogEventLevel.Information, null, + new MessageTemplate(Enumerable.Empty()), Enumerable.Empty(), + traceId, spanId); + var json = AssertValidJson(log => log.Write(evt)); + Assert.Equal(traceId.ToHexString(), json["@tr"]); + Assert.Equal(spanId.ToHexString(), json["@sp"]); + } } }