Faithlife.Tracing provides distributed tracing for .NET applications and web services.


Faithlife.Tracing should be installed via NuGet.


How to Use


Install the Faithlife.Tracing.AspNetMvc or Faithlife.Tracing.AspNetWebApi package, as appropriate, as well as Faithlife.Tracing.Zipkin. Then add the following code to the constructor of your HttpApplication-derived class (in Global.asax.cs):

public MyApplication()
    AspNetWebApiTracing.Initialize(this, new AspNetWebApiTracingSettings // use Mvc instead of WebApi as appropriate
        ServiceName = "MyService",
        CreateTracer = () => ZipkinTracing.CreateTracer(new Uri("http://zipkin-collector:9411")),

In your type registry, register ITraceSpanProvider as a per-request object that’s obtained from HttpContext.Current. This may look something like (StructureMap):

For<ITraceSpanProvider>().HttpContextScoped().Use(c => AspNetWebApiTracing.GetProvider(HttpContext.Current));

or (AutoFac):

builder.Register<ITraceSpanProvider>(c => AspNetWebApiTracing.GetProvider(HttpContext.Current)).InstancePerRequest();


Install the Faithlife.Tracing.AspNetCore and Faithlife.Tracing.Zipkin packages. Add the following to your Setup class:

public void ConfigureServices(IServiceCollection services)
    // ...

    // If using MVC, add tracing support

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    // ...

    app.UseTracing(settings =>
        settings.ServiceName = "MyService";
        settings.CreateTracer = () => ZipkinTracing.CreateTracer(new Uri("http://zipkin-collector:9411"));

    // Add tracing before MVC, if using


Install the Faithlife.Tracing.Data package. Modify your code that creates a DbConnection object (e.g., MySqlConnection) to return a TracingDbConnection:

public DbConnection CreateConnection(string connectionString)
    ITraceSpanProvider traceProvider = // get the ITraceSpanProvider for the current request
    return TracingDbConnection.Create(new MySqlConnection(connectionString), traceProvider);


Install the Faithlife.Tracing.Http package. Trace HTTP requests by inserting a new HttpMessageHandler into the stack.

ITraceSpanProvider traceSpanProvider = // get the ITraceSpanProvider for the current request
var tracingMessageHandler = HttpTracingUtility.CreateHttpMessageHandler(traceSpanProvider, new HttpClientHandler());
var httpClient = new HttpClient(tracingMessageHandler);
// use httpClient