SerilogTracing 1.0.0-dev-00038

This is a prerelease version of SerilogTracing.
There is a newer version of this package available.
See the version list below for details.
dotnet add package SerilogTracing --version 1.0.0-dev-00038                
NuGet\Install-Package SerilogTracing -Version 1.0.0-dev-00038                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SerilogTracing" Version="1.0.0-dev-00038" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SerilogTracing --version 1.0.0-dev-00038                
#r "nuget: SerilogTracing, 1.0.0-dev-00038"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SerilogTracing as a Cake Addin
#addin nuget:?package=SerilogTracing&version=1.0.0-dev-00038&prerelease

// Install SerilogTracing as a Cake Tool
#tool nuget:?package=SerilogTracing&version=1.0.0-dev-00038&prerelease                

SerilogTracing

An experimental Serilog extension for producing and capturing hierarchical traces.

This is the logical successor to SerilogTimings, which provides very similar functionality, but emits plain log events rather than hierarchical traces.

What is SerilogTracing?

SerilogTracing integrates Serilog with the System.Diagnostics.Activity* types provided by the .NET BCL. This makes it possible to:

  1. Record traces generated using the .NET APIs through Serilog sinks, and
  2. 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:

A screenshot of Windows Terminal showing output from the included Example application.

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:

A screenshot of Seq showing output from the included Example application.

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 LogEvents 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 LogEvents can be formatted for various trace-aware outputs.

Starting, enriching, and completing activities

Activities are represented by LoggerActivity instances.

LoggerActivity has a simple lifetime:

  • The activity is started using one of the ILogger.StartActivity() extensions,
  • Properties are added to the activity using LoggerActivity.AddProperty(), and
  • The activity is completed either implicitly, by IDisposable.Dispose(), or explicitly using LoggerActivity.Complete().

LoggerActivity.Complete() accepts optional LogEventLevel and Exception arguments.

Displaying output

Use the formatters provides by Serilog.Tracing.Formatting.DefaultFormatting to pretty-print spans as text, or serialize to JSON.

Configuring the activity listener

Activity sources can be enabled and disabled using the standard MinimumLevel.Override() mechanism.

Status

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).

Product 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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.1 7,914 12/19/2024
2.3.1-dev-00396 172 12/19/2024
2.3.1-dev-00395 206 12/8/2024
2.3.1-dev-00393 141 12/8/2024
2.3.0 50,186 11/28/2024
2.3.0-dev-00387 147 11/28/2024
2.3.0-dev-00386 236 11/15/2024
2.3.0-dev-00384 153 11/15/2024
2.3.0-dev-00377 912 11/10/2024
2.3.0-dev-00376 157 11/10/2024
2.3.0-dev-00360 5,004 10/18/2024
2.2.1-dev-00359 135 10/18/2024
2.2.1-dev-00356 681 10/14/2024
2.2.0 71,235 10/14/2024
2.2.0-dev-00353 171 10/10/2024
2.2.0-dev-00352 162 10/10/2024
2.1.3-dev-00351 171 10/10/2024
2.1.2 19,202 10/8/2024
2.1.2-dev-00345 163 10/8/2024
2.1.2-dev-00344 172 10/8/2024
2.1.2-dev-00342 294 10/8/2024
2.1.2-dev-00339 150 10/4/2024
2.1.2-dev-00336 178 10/2/2024
2.1.1 27,298 10/2/2024
2.1.1-dev-00332 179 10/2/2024
2.1.1-dev-00331 156 10/2/2024
2.1.1-dev-00324 1,063 7/29/2024
2.1.0 54,104 7/29/2024
2.1.0-dev-00322 139 7/29/2024
2.1.0-dev-00321 115 7/29/2024
2.1.0-dev-00320 136 7/29/2024
2.1.0-dev-00319 128 7/29/2024
2.1.0-dev-00317 249 7/24/2024
2.1.0-dev-00313 279 7/22/2024
2.0.1-dev-00312 205 7/22/2024
2.0.0 88,345 6/4/2024
2.0.0-dev-00306 231 6/3/2024
2.0.0-dev-00305 251 6/3/2024
2.0.0-dev-00304 265 6/1/2024
2.0.0-dev-00303 264 6/1/2024
1.1.0 51,485 5/2/2024
1.1.0-dev-00298 228 5/24/2024
1.1.0-dev-00297 239 5/24/2024
1.1.0-dev-00296 239 5/24/2024
1.1.0-dev-00295 193 5/16/2024
1.1.0-dev-00292 240 5/10/2024
1.1.0-dev-00287 271 5/1/2024
1.1.0-dev-00286 259 5/1/2024
1.1.0-dev-00283 258 4/30/2024
1.1.0-dev-00282 263 4/30/2024
1.0.1 14,213 4/18/2024
1.0.1-dev-00280 262 4/30/2024
1.0.1-dev-00276 242 4/18/2024
1.0.1-dev-00275 225 4/18/2024
1.0.1-dev-00273 15,477 3/26/2024
1.0.1-dev-00267 57,608 3/11/2024
1.0.1-dev-00266 378 3/11/2024
1.0.1-dev-00264 436 3/10/2024
1.0.1-dev-00261 1,079 3/5/2024
1.0.0 25,095 3/3/2024
1.0.0-dev-00257 3,237 2/29/2024
1.0.0-dev-00256 243 2/29/2024
1.0.0-dev-00251 1,033 2/27/2024
1.0.0-dev-00249 221 2/26/2024
1.0.0-dev-00247 238 2/26/2024
1.0.0-dev-00246 261 2/24/2024
1.0.0-dev-00242 1,324 2/22/2024
1.0.0-dev-00240 270 2/21/2024
1.0.0-dev-00236 229 2/21/2024
1.0.0-dev-00233 1,984 2/12/2024
1.0.0-dev-00231 592 2/12/2024
1.0.0-dev-00229 266 2/12/2024
1.0.0-dev-00228 248 2/12/2024
1.0.0-dev-00227 253 2/12/2024
1.0.0-dev-00225 231 2/12/2024
1.0.0-dev-00214 670 2/10/2024
1.0.0-dev-00179 245 2/9/2024
1.0.0-dev-00167 208 2/8/2024
1.0.0-dev-00164 240 2/8/2024
1.0.0-dev-00159 262 2/8/2024
1.0.0-dev-00155 244 2/7/2024
1.0.0-dev-00150 249 2/7/2024
1.0.0-dev-00142 313 2/6/2024
1.0.0-dev-00138 243 2/6/2024
1.0.0-dev-00135 245 2/6/2024
1.0.0-dev-00134 247 2/6/2024
1.0.0-dev-00132 292 2/5/2024
1.0.0-dev-00127 216 2/5/2024
1.0.0-dev-00121 266 2/1/2024
1.0.0-dev-00118 238 2/1/2024
1.0.0-dev-00115 203 2/1/2024
1.0.0-dev-00113 226 2/1/2024
1.0.0-dev-00107 211 1/31/2024
1.0.0-dev-00103 251 1/30/2024
1.0.0-dev-00102 1,150 1/25/2024
1.0.0-dev-00100 412 1/24/2024
1.0.0-dev-00097 238 1/24/2024
1.0.0-dev-00090 408 1/24/2024
1.0.0-dev-00088 1,100 1/22/2024
1.0.0-dev-00087 256 1/19/2024
1.0.0-dev-00086 215 1/18/2024
1.0.0-dev-00082 187 1/17/2024
1.0.0-dev-00080 179 1/17/2024
1.0.0-dev-00079 178 1/17/2024
1.0.0-dev-00077 177 1/17/2024
1.0.0-dev-00076 182 1/17/2024
1.0.0-dev-00070 157 1/16/2024
1.0.0-dev-00067 180 1/16/2024
1.0.0-dev-00066 170 1/16/2024
1.0.0-dev-00055 279 1/11/2024
1.0.0-dev-00051 155 1/10/2024
1.0.0-dev-00049 122 1/9/2024
1.0.0-dev-00044 131 1/9/2024
1.0.0-dev-00039 185 1/4/2024
1.0.0-dev-00038 111 1/4/2024
1.0.0-dev-00037 126 1/3/2024
1.0.0-dev-00034 115 1/3/2024
1.0.0-dev-00031 110 1/2/2024
1.0.0-dev-00030 123 1/2/2024
1.0.0-dev-00022 630 12/4/2023
1.0.0-dev-00017 127 11/28/2023
1.0.0-dev-00016 170 11/15/2023
1.0.0-dev-00015 112 11/15/2023
1.0.0-dev-00011 132 11/10/2023
1.0.0-dev-00010 613 11/7/2023
1.0.0-dev-00009 103 11/5/2023