https://github.com/serilog/serilog-sinks-map
A Serilog sink wrapper that dispatches events based on a property value
https://github.com/serilog/serilog-sinks-map
Last synced: 3 months ago
JSON representation
A Serilog sink wrapper that dispatches events based on a property value
- Host: GitHub
- URL: https://github.com/serilog/serilog-sinks-map
- Owner: serilog
- License: apache-2.0
- Created: 2017-06-06T09:47:41.000Z (about 8 years ago)
- Default Branch: dev
- Last Pushed: 2024-07-11T21:21:03.000Z (12 months ago)
- Last Synced: 2025-03-31T04:05:38.950Z (3 months ago)
- Language: C#
- Homepage:
- Size: 89.8 KB
- Stars: 49
- Watchers: 12
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Serilog.Sinks.Map [](https://ci.appveyor.com/project/serilog/serilog-sinks-map) [](https://www.nuget.org/packages/serilog.sinks.map)
A Serilog sink wrapper that dispatches events based on a property value.
### Getting started
Install the package from NuGet:
```powershell
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_:
```powershell
dotnet add package Serilog.Sinks.File
```The value of a log event property like `Name` can be inserted into log filenames:
```csharp
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.txtLog.Information("Hello, {Name}!", "Bob");
// -> Event written to log-Bob.txtLog.Information("Shutting down");
// -> Event written to log-Other.txtLog.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`:
```csharp
.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 `` 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.