Serilog.Enrichers.Thread 4.0.0-dev-00767

Serilog.Enrichers.Thread Build status NuGet Version

Enrich Serilog events with properties from the current thread.

Getting started

Install the package from NuGet:

Install-Package Serilog.Enrichers.Thread

In your logger configuration, apply Enrich.WithThreadId() and Enrich.WithThreadName():

Log.Logger = new LoggerConfiguration()
    .Enrich.WithThreadId()
    .Enrich.WithThreadName()
    .CreateLogger();

Many sinks simply include all properties without further action required, so the thread id will be logged automatically. However, some sinks, such as the File and Console sinks use an output template and the new ThreadId may not be automatically output in your sink. In this case, in order for the ThreadId or ThreadName to show up in the logging, you will need to create or modify your output template.

w.File(...., outputTemplate:
  "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} {Properties}{NewLine}{Exception}")

Here, {Properties} can include not only ThreadId and ThreadName, but any other enrichment which is applied. Alternatively, {ThreadId} could be used instead, if you want to only add the thread id enrichment and {ThreadName}, if you want to only add the thread name enrichment.

An example, which also uses the Serilogs.Sinks.Async Nuget package, is below:

            Thread.CurrentThread.Name = "MyWorker";
              
            var logger = Log.Logger = new LoggerConfiguration()
                 .MinimumLevel.Debug()
                 .WriteTo.Console(restrictedToMinimumLevel:Serilog.Events.LogEventLevel.Information)
                 .WriteTo.Async(w=>w.File("..\\..\\..\\..\\logs\\SerilogLogFile.json", rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj} <{ThreadId}><{ThreadName}>{NewLine}{Exception}"))
                 .Enrich.WithThreadId()
                 .CreateLogger();

Which would produce an output in the log file as follows:

2018-04-06 13:12:45.684 +02:00 [ERR] The file file_name.svg does not exist <4><MyWorker>

Where, <4> is an example thread id and <MyWorker> is an example thread name.

To use the enricher, first install the NuGet package:

Install-Package Serilog.Enrichers.Thread

Note: The {ThreadName} property will only be attached when it is not null. Otherwise it will be omitted. If you want to get this property always attached you can use the following:

using Serilog.Enrichers;

Log.Logger = new LoggerConfiguration()
    .Enrich.WithThreadName()
    .Enrich.WithProperty(ThreadNameEnricher.ThreadNamePropertyName, "MyDefault")
    .CreateLogger();

The enrichment order is important. Otherwise "MyDefault" would always win.

Copyright © 2016 Serilog Contributors - Provided under the Apache License, Version 2.0.

Showing the top 20 packages that depend on Serilog.Enrichers.Thread.

Packages Downloads
Hobud.Tools.Log
Package Description
2,016
Hobud.Tools.Log
Package Description
1,987
Hobud.Tools.Log
Package Description
1,631
Hobud.Tools.Log
Package Description
1,576
Hobud.Tools.Log
Package Description
1,133
Hobud.Tools.Crypto
Package Description
762
Hobud.Tools.Crypto
Package Description
694
Hobud.Tools.Log
Package Description
493
Hobud.Tools.Log
Package Description
466
Hobud.Tools.Log
Package Description
439
Hobud.Tools.Crypto
Package Description
316
Hobud.Tools.Crypto
Package Description
297
Hobud.Tools.Log
Package Description
260
Hobud.Tools.Log
Package Description
242
Hobud.Tools.Crypto
Package Description
227
Hobud.Tools.Log
Package Description
123
Hobud.Tools.Log
Package Description
120
Hobud.Tools.Log
Package Description
75
Hobud.Tools.Log
Package Description
66
Hobud.Tools.Log
Package Description
57

.NET Framework 4.6.2

.NET Framework 4.7.1

.NET 6.0

.NET 8.0

.NET Standard 2.0

Version Downloads Last updated
4.0.0 487 08/12/2024
4.0.0-dev-00770 9 02/19/2025
4.0.0-dev-00767 7 05/24/2025
4.0.0-dev-00762 9 03/28/2025
3.2.0-dev-00756 8 02/20/2025
3.2.0-dev-00752 8 05/24/2025
3.2.0-dev-00750 9 05/24/2025
3.2.0-dev-00747 8 05/24/2025
3.1.1-dev-00745 9 02/20/2025
3.1.1-dev-00743 8 05/24/2025
3.1.0 2,096 08/06/2024
3.1.0-dev-00739 8 05/24/2025
3.0.1-dev-00737 8 05/24/2025
3.0.1-dev-00731 8 05/24/2025
3.0.1-dev-00728 9 02/20/2025
3.0.1-dev-00727 8 05/24/2025
3.0.0 10 02/19/2025
3.0.0-dev-00721 8 05/24/2025
2.0.1-dev-00720 8 05/24/2025
2.0.0 11 02/19/2025
2.0.0-rc-712 11 02/19/2025
2.0.0-beta-705 10 02/19/2025
2.0.0-beta-701 10 02/19/2025
2.0.0-beta-700 10 02/19/2025
2.0.0-beta-521 10 02/19/2025
2.0.0-beta-519 10 02/19/2025
2.0.0-beta-516 10 02/19/2025
2.0.0-beta-515 10 02/19/2025
2.0.0-beta-513 10 02/19/2025
2.0.0-beta-511 10 02/19/2025
2.0.0-beta-509 11 02/19/2025
2.0.0-beta-507 10 02/19/2025
2.0.0-beta-505 11 02/19/2025
2.0.0-beta-502 10 02/19/2025
2.0.0-beta-499 11 02/19/2025