SerilogTracing 1.0.0-dev-00022
See the version list below for details.
dotnet add package SerilogTracing --version 1.0.0-dev-00022
NuGet\Install-Package SerilogTracing -Version 1.0.0-dev-00022
<PackageReference Include="SerilogTracing" Version="1.0.0-dev-00022" />
paket add SerilogTracing --version 1.0.0-dev-00022
#r "nuget: SerilogTracing, 1.0.0-dev-00022"
// Install SerilogTracing as a Cake Addin #addin nuget:?package=SerilogTracing&version=1.0.0-dev-00022&prerelease // Install SerilogTracing as a Cake Tool #tool nuget:?package=SerilogTracing&version=1.0.0-dev-00022&prerelease
SerilogTracing
⚠ This project isn't ready to check out just yet, please drop by again soon.
An experimental Serilog extension for producing and capturing hierarchical traces.
What is SerilogTracing?
SerilogTracing integrates Serilog with the System.Diagnostics.Activity*
types provided by the .NET BCL. This makes
it possible to:
- Record traces generated using the .NET APIs through Serilog sinks, and
- Generate rich traces using Serilog APIs and idioms, that can still be observed by other consumers of the .NET APIs.
There are two main scenarios where these capabilities combine usefully.
First, at development time, routing trace information through Serilog means that all of the beautiful, developer-friendly Serilog outputs can be used for simple local feedback.
Here's what that looks like, routed through Serilog's console sink:
The example is using Serilog's ExpressionTemplate
to annotate each span in the trace with timing information. The
layout is fully configurable - check out Program.cs
in the included example project - so let your ASCII artistry run
wild!
Second, in production, Serilog's existing configuration, enrichment, filtering, formatting, and output facilities can potentially provide a flexible mechanism for emitting trace data to a wide range of targets.
Notably, any system that accepts traces in text or JSON format should be an easy target for SerilogTracing and a
Serilog sink; here's Seq showing traces delivered using the production Serilog.Sinks.Seq package and a custom
ITextFormatter
implemented with ExpressionTemplate
:
![]
How does it work?
And what do we mean by "tracing"?
A trace is just a collection of spans, and a span is just an event that carries a:
- trace id,
- span id,
- parent span id (optional),
- start time, and
- duration.
SerilogTracing generates spans using extension methods on ILogger
:
using var activity = logger.StartActivity("Compute {A} + {B}", a, b);
// ... on `Dispose()` the activity will be recorded as a span
The spans generated by SerilogTracing are converted into Serilog LogEvent
s and routed through the logger. There's
nothing particularly special about these events, except that they add ParentSpanId
and SpanStartTimestamp
properties to represent the parts of a span not already covered by the other parts of the LogEvent
.
SerilogTracing needs to hook into the logging pipeline at creation time; currently this must be done using:
Log.Logger = new LoggerConfiguration()
... // Other configuration as usual, then:
.CreateTracingLogger();
In addition to generating spans, SerilogTracing also consumes spans generated elsewhere in an application via the
System.Diagnostics.Activity
APIs, such as those produced by ASP.NET Core or HttpClient
. Activity sources can be
enabled or disabled using the logger's MinimumLevel.Override
settings.
Finally, SerilogTracing includes some examples showing how the resulting LogEvent
s can be formatted for various
trace-aware outputs.
Starting, enriching, and completing activities
TBA.
Configuring the activity listener
TBA. Need a discussion of how sources can be filtered or ignored using MinimumLevel.Override
on
the target logger.
Formatting spans with ExpressionTemplate
TBA.
Status and known limitations
This project is experimental. It's not a part of Serilog, not maintained by the Serilog maintainers, and might not evolve in any particular way: there's currently no plan to integrate this functionality directly into Serilog. (Having said that, this project is a vehicle to explore those possibilities).
Other limitations generally stem from the project's immaturity or implementation state: if something listed here interests you, feel free to hack away on a fork and propose any useful changes you can come up with!
- Not much thought has been given to sampling.
- Non-W3C id formats haven't been considered at all.
- Activities generated by SerilogTracing won't expose source names based on
ForContext<T>()
to otherActivityListener
s, instead marking the activities as from the genericSerilog.Core.Logger
source. To expose richer source names, use the generic overload of theStartActivity
extension method. - Serilog.Sinks.OpenTelemetry, which should be a useful output for SerilogTracing, doesn't yet include any support for emitting spans over OTLP.
- No generic mechanism has been considered nor implemented for suppressing instrumentation during operations, e.g. sinks may themselves trigger creation of new spans, if steps aren't taken to prevent it.
- Activity baggage is ignored.
- Activity properties are ignored, no enrichment of generated spans from non-tag activity information has been implemented.
- Because the API hooks logger creation, it doesn't currently sit well alongside
CreateBootstrapLogger
.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Serilog (>= 3.1.1)
- Serilog.Expressions (>= 4.0.0)
-
net8.0
- Serilog (>= 3.1.1)
- Serilog.Expressions (>= 4.0.0)
NuGet packages (8)
Showing the top 5 NuGet packages that depend on SerilogTracing:
Package | Downloads |
---|---|
SerilogTracing.Instrumentation.AspNetCore
Package Description |
|
SerilogTracing.Expressions
Package Description |
|
SerilogTracing.Sinks.OpenTelemetry
Sends log events and traces to OTLP (gRPC or HTTP) endpoints. This package is obsolete; use Serilog.Sinks.OpenTelemetry v4.x or later instead. |
|
SerilogTracing.Instrumentation.SqlClient
Package Description |
|
SerilogTracing.Sinks.Seq
Package Description |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on SerilogTracing:
Repository | Stars |
---|---|
datalust/seqcli
The Seq command-line client. Administer, log, ingest, search, from any OS.
|
Version | Downloads | Last updated |
---|---|---|
2.3.0-dev-00386 | 163 | 11/15/2024 |
2.3.0-dev-00384 | 138 | 11/15/2024 |
2.3.0-dev-00377 | 346 | 11/10/2024 |
2.3.0-dev-00376 | 144 | 11/10/2024 |
2.3.0-dev-00360 | 2,312 | 10/18/2024 |
2.2.1-dev-00359 | 128 | 10/18/2024 |
2.2.1-dev-00356 | 302 | 10/14/2024 |
2.2.0 | 24,067 | 10/14/2024 |
2.2.0-dev-00353 | 165 | 10/10/2024 |
2.2.0-dev-00352 | 154 | 10/10/2024 |
2.1.3-dev-00351 | 165 | 10/10/2024 |
2.1.2 | 17,763 | 10/8/2024 |
2.1.2-dev-00345 | 159 | 10/8/2024 |
2.1.2-dev-00344 | 160 | 10/8/2024 |
2.1.2-dev-00342 | 288 | 10/8/2024 |
2.1.2-dev-00339 | 142 | 10/4/2024 |
2.1.2-dev-00336 | 172 | 10/2/2024 |
2.1.1 | 15,559 | 10/2/2024 |
2.1.1-dev-00332 | 174 | 10/2/2024 |
2.1.1-dev-00331 | 149 | 10/2/2024 |
2.1.1-dev-00324 | 733 | 7/29/2024 |
2.1.0 | 41,686 | 7/29/2024 |
2.1.0-dev-00322 | 135 | 7/29/2024 |
2.1.0-dev-00321 | 109 | 7/29/2024 |
2.1.0-dev-00320 | 130 | 7/29/2024 |
2.1.0-dev-00319 | 124 | 7/29/2024 |
2.1.0-dev-00317 | 239 | 7/24/2024 |
2.1.0-dev-00313 | 273 | 7/22/2024 |
2.0.1-dev-00312 | 201 | 7/22/2024 |
2.0.0 | 79,364 | 6/4/2024 |
2.0.0-dev-00306 | 226 | 6/3/2024 |
2.0.0-dev-00305 | 246 | 6/3/2024 |
2.0.0-dev-00304 | 258 | 6/1/2024 |
2.0.0-dev-00303 | 253 | 6/1/2024 |
1.1.0 | 40,649 | 5/2/2024 |
1.1.0-dev-00298 | 217 | 5/24/2024 |
1.1.0-dev-00297 | 234 | 5/24/2024 |
1.1.0-dev-00296 | 226 | 5/24/2024 |
1.1.0-dev-00295 | 184 | 5/16/2024 |
1.1.0-dev-00292 | 231 | 5/10/2024 |
1.1.0-dev-00287 | 264 | 5/1/2024 |
1.1.0-dev-00286 | 254 | 5/1/2024 |
1.1.0-dev-00283 | 247 | 4/30/2024 |
1.1.0-dev-00282 | 256 | 4/30/2024 |
1.0.1 | 13,360 | 4/18/2024 |
1.0.1-dev-00280 | 254 | 4/30/2024 |
1.0.1-dev-00276 | 235 | 4/18/2024 |
1.0.1-dev-00275 | 218 | 4/18/2024 |
1.0.1-dev-00273 | 15,470 | 3/26/2024 |
1.0.1-dev-00267 | 49,904 | 3/11/2024 |
1.0.1-dev-00266 | 371 | 3/11/2024 |
1.0.1-dev-00264 | 342 | 3/10/2024 |
1.0.1-dev-00261 | 997 | 3/5/2024 |
1.0.0 | 22,920 | 3/3/2024 |
1.0.0-dev-00257 | 3,109 | 2/29/2024 |
1.0.0-dev-00256 | 238 | 2/29/2024 |
1.0.0-dev-00251 | 1,028 | 2/27/2024 |
1.0.0-dev-00249 | 214 | 2/26/2024 |
1.0.0-dev-00247 | 231 | 2/26/2024 |
1.0.0-dev-00246 | 252 | 2/24/2024 |
1.0.0-dev-00242 | 1,317 | 2/22/2024 |
1.0.0-dev-00240 | 262 | 2/21/2024 |
1.0.0-dev-00236 | 223 | 2/21/2024 |
1.0.0-dev-00233 | 1,968 | 2/12/2024 |
1.0.0-dev-00231 | 581 | 2/12/2024 |
1.0.0-dev-00229 | 255 | 2/12/2024 |
1.0.0-dev-00228 | 237 | 2/12/2024 |
1.0.0-dev-00227 | 240 | 2/12/2024 |
1.0.0-dev-00225 | 221 | 2/12/2024 |
1.0.0-dev-00214 | 660 | 2/10/2024 |
1.0.0-dev-00179 | 234 | 2/9/2024 |
1.0.0-dev-00167 | 199 | 2/8/2024 |
1.0.0-dev-00164 | 231 | 2/8/2024 |
1.0.0-dev-00159 | 257 | 2/8/2024 |
1.0.0-dev-00155 | 237 | 2/7/2024 |
1.0.0-dev-00150 | 244 | 2/7/2024 |
1.0.0-dev-00142 | 306 | 2/6/2024 |
1.0.0-dev-00138 | 236 | 2/6/2024 |
1.0.0-dev-00135 | 240 | 2/6/2024 |
1.0.0-dev-00134 | 242 | 2/6/2024 |
1.0.0-dev-00132 | 287 | 2/5/2024 |
1.0.0-dev-00127 | 210 | 2/5/2024 |
1.0.0-dev-00121 | 261 | 2/1/2024 |
1.0.0-dev-00118 | 233 | 2/1/2024 |
1.0.0-dev-00115 | 198 | 2/1/2024 |
1.0.0-dev-00113 | 221 | 2/1/2024 |
1.0.0-dev-00107 | 204 | 1/31/2024 |
1.0.0-dev-00103 | 246 | 1/30/2024 |
1.0.0-dev-00102 | 1,145 | 1/25/2024 |
1.0.0-dev-00100 | 407 | 1/24/2024 |
1.0.0-dev-00097 | 233 | 1/24/2024 |
1.0.0-dev-00090 | 392 | 1/24/2024 |
1.0.0-dev-00088 | 1,086 | 1/22/2024 |
1.0.0-dev-00087 | 249 | 1/19/2024 |
1.0.0-dev-00086 | 210 | 1/18/2024 |
1.0.0-dev-00082 | 182 | 1/17/2024 |
1.0.0-dev-00080 | 174 | 1/17/2024 |
1.0.0-dev-00079 | 173 | 1/17/2024 |
1.0.0-dev-00077 | 172 | 1/17/2024 |
1.0.0-dev-00076 | 177 | 1/17/2024 |
1.0.0-dev-00070 | 152 | 1/16/2024 |
1.0.0-dev-00067 | 173 | 1/16/2024 |
1.0.0-dev-00066 | 165 | 1/16/2024 |
1.0.0-dev-00055 | 274 | 1/11/2024 |
1.0.0-dev-00051 | 150 | 1/10/2024 |
1.0.0-dev-00049 | 117 | 1/9/2024 |
1.0.0-dev-00044 | 123 | 1/9/2024 |
1.0.0-dev-00039 | 180 | 1/4/2024 |
1.0.0-dev-00038 | 106 | 1/4/2024 |
1.0.0-dev-00037 | 121 | 1/3/2024 |
1.0.0-dev-00034 | 110 | 1/3/2024 |
1.0.0-dev-00031 | 105 | 1/2/2024 |
1.0.0-dev-00030 | 117 | 1/2/2024 |
1.0.0-dev-00022 | 625 | 12/4/2023 |
1.0.0-dev-00017 | 122 | 11/28/2023 |
1.0.0-dev-00016 | 165 | 11/15/2023 |
1.0.0-dev-00015 | 106 | 11/15/2023 |
1.0.0-dev-00011 | 127 | 11/10/2023 |
1.0.0-dev-00010 | 606 | 11/7/2023 |
1.0.0-dev-00009 | 98 | 11/5/2023 |