Serilog.Sinks.Map 2.0.0

Serilog.Sinks.Map Build status NuGet Pre Release

A Serilog sink wrapper that dispatches events based on a property value.

Getting started

Install the package from NuGet:

dotnet add package Serilog.Sinks.Map

The WriteTo.Map() method accepts a property name to use as a sink selector, a default value to use when the property is not attached, and a function that configures the sinks based on each property value.

For example, when using Serilog.Sinks.File:

dotnet add package Serilog.Sinks.File

The value of a log event property like Name can be inserted into log filenames:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Map("Name", "Other", (name, wt) => wt.File($"./logs/log-{name}.txt"))
    .CreateLogger();

Log.Information("Hello, {Name}!", "Alice");
// -> Event written to log-Alice.txt

Log.Information("Hello, {Name}!", "Bob");
// -> Event written to log-Bob.txt

Log.Information("Shutting down");
// -> Event written to log-Other.txt

Log.CloseAndFlush();

Limiting the number of open sinks

By default, the target sinks opened by this sink won't be closed/disposed until the mapped sink is. This is efficient for dispatching to a finite number of sinks, e.g. file-per-log-level and so-on, but isn't suitable when the set of possible key values is open-ended.

To limit the number of target sinks that will be kept open in the map, specify sinkMapCountLimit:

    .WriteTo.Map("Name",
                 "Other",
                 (name, wt) => wt.File($"./logs/log-{name}.txt"),
                 sinkMapCountLimit: 10)

To keep no sinks open, i.e. close them immediately after processing each event, a sinkMapCountLimit of zero may be specified.

Configuration with <appSettings> and appSettings.json

Serilog.Sinks.Map is built around a mapping function, and as such, isn't able to be configured using XML or JSON configuration.

No packages depend on Serilog.Sinks.Map.

.NET Framework 4.6.2

.NET Framework 4.7.1

.NET 6.0

.NET 8.0

.NET Standard 2.0

Version Downloads Last updated
2.0.0 46 07/14/2024
2.0.0-dev-00048 30 07/14/2024
1.0.2 1,841 12/13/2023
1.0.2-dev-00040 32 01/03/2024
1.0.2-dev-00031 30 01/03/2024
1.0.1 29 01/03/2024
1.0.1-dev-00028 36 01/03/2024
1.0.1-dev-00025 38 01/03/2024
1.0.0 40 01/03/2024
1.0.0-dev-00020 33 01/03/2024
1.0.0-dev-00017 29 01/03/2024
1.0.0-dev-00012 34 01/03/2024
1.0.0-dev-00008 31 01/03/2024
1.0.0-dev-00006 33 01/03/2024
1.0.0-dev-00004 32 01/03/2024
1.0.0-dev-00001 31 01/03/2024