Serilog.Sinks.PeriodicBatching 5.0.1-dev-00860

Serilog.Sinks.PeriodicBatching Build status NuGet Version

A wrapper for Serilog sinks that asynchronously emits events in batches, useful when logging to a slow and/or remote target.

[!IMPORTANT] Serilog 4.x and later versions support batching natively. New projects should use Serilog's IBatchedLogEventSink and WriteTo.Sink(IBatchedLogEventSink), not this package which is now only maintained for compatibility reasons.

Updating for Serilog v4+

First, update your Serilog package reference to the latest published version.

This example is from Serilog.Sinks.Postgresql.Alternative. Old code:

var batchingOptions = new PeriodicBatchingSinkOptions()
{
    BatchSizeLimit = postgresOptions.BatchSizeLimit,
    Period = postgresOptions.Period,
    QueueLimit = postgresOptions.QueueLimit
};

var batchingSink = new PeriodicBatchingSink(new PostgreSqlSink(postgresOptions), batchingOptions);
return sinkConfiguration.Sink(batchingSink, restrictedToMinimumLevel, levelSwitch);

New code:

var batchingOptions = new BatchingOptions()
{
    BatchSizeLimit = postgresOptions.BatchSizeLimit,
    BufferingTimeLimit = postgresOptions.Period,
    QueueLimit = postgresOptions.QueueLimit
};

return sinkConfiguration.Sink(
    new PostgreSqlSink(postgresOptions), batchingOptions, restrictedToMinimumLevel, levelSwitch);

When you're done, don't forget to remove the Serilog.Sinks.PeriodicBatching package dependency.

Getting started

Sinks that, for performance reasons, need to emit events in batches, can be implemented using PeriodicBatchingSink from this package.

First, install the package into your Sink project:

dotnet add package Serilog.Sinks.PeriodicBatching

Then, instead of implementing Serilog's ILogEventSink, implement IBatchedLogEventSink in your sink class:

class ExampleBatchedSink : IBatchedLogEventSink
{
    public async Task EmitBatchAsync(IEnumerable<LogEvent> batch)
    {
        foreach (var logEvent in batch)
            Console.WriteLine(logEvent);
    }
    
    public Task OnEmptyBatchAsync() { }
}

Finally, in your sink's configuration method, construct a PeriodicBatchingSink that wraps your batched sink:

public static class LoggerSinkExampleConfiguration
{
    public static LoggerConfiguration Example(this LoggerSinkConfiguration loggerSinkConfiguration)
    {
        var exampleSink = new ExampleBatchedSink();
        
        var batchingOptions = new PeriodicBatchingSinkOptions
        {
            BatchSizeLimit = 100,
            Period = TimeSpan.FromSeconds(2),
            EagerlyEmitFirstEvent = true,
            QueueLimit = 10000
        };
        
        var batchingSink = new PeriodicBatchingSink(exampleSink, batchingOptions);
        
        return loggerSinkConfiguration.Sink(batchingSink);
    }
}

Showing the top 20 packages that depend on Serilog.Sinks.PeriodicBatching.

Packages Downloads
Serilog.Sinks.Seq
Serilog sink that writes to the Seq log server over HTTP/HTTPS.
1,301
Serilog.Sinks.Seq
Serilog sink that writes to the Seq log server over HTTP/HTTPS.
405
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
30
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
28
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
27
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
26
Serilog.Sinks.Http
Serilog event sink that sends HTTP POST requests over the network.
26
Serilog.Sinks.Seq
Serilog sink that writes to the Seq log server over HTTP/HTTPS.
26
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
25
Serilog.Sinks.Http
Serilog event sink that sends HTTP POST requests over the network.
24
Serilog.Sinks.Http
A Serilog sink sending log events over HTTP.
24
Serilog.Sinks.Seq
Serilog sink that writes to the Seq log server over HTTP/HTTPS.
24

.NET Framework 4.6.2

.NET Framework 4.7.1

.NET 6.0

.NET 8.0

.NET Standard 2.0

Version Downloads Last updated
5.0.1-dev-00860 15 07/05/2024
5.0.0 13 06/06/2024
5.0.0-dev-00855 12 06/06/2024
4.1.2-dev-00851 14 06/02/2024
4.1.1 13 06/01/2024
4.1.1-dev-00845 15 05/29/2024
4.1.0 14 05/09/2024
4.1.0-dev-00840 14 05/09/2024
4.0.2-dev-00838 15 05/09/2024
4.0.1 12 03/16/2024
4.0.1-dev-00832 15 03/17/2024
4.0.0 16 03/02/2024
4.0.0-dev-00824 13 02/06/2024
4.0.0-dev-00821 19 02/06/2024
3.1.1-dev-00804 19 06/03/2023
3.1.1-dev-00801 23 06/03/2023
3.1.0 20 06/03/2023
3.1.0-dev-00796 16 06/03/2023
3.0.0 19 06/03/2023
3.0.0-dev-00792 14 06/03/2023
2.3.1 17 06/03/2023
2.3.1-dev-00785 18 06/03/2023
2.3.1-dev-00780 16 06/03/2023
2.3.1-dev-00776 21 06/03/2023
2.3.1-dev-00774 19 06/03/2023
2.3.0 1,680 04/16/2021
2.3.0-dev-00765 19 06/03/2023
2.3.0-dev-00762 20 06/03/2023
2.3.0-dev-00760 19 06/03/2023
2.2.1-dev-00758 18 06/03/2023
2.2.1-dev-00755 15 06/03/2023
2.2.0 21 06/03/2023
2.2.0-dev-00748 17 06/03/2023
2.2.0-dev-00740 25 06/03/2023
2.1.1 22 06/03/2023
2.1.1-dev-00732 22 06/03/2023
2.1.1-dev-00729 18 06/03/2023
2.1.1-dev-00725 19 06/03/2023
2.1.0 20 06/03/2023
2.1.0-dev-00720 16 06/03/2023
2.0.2-dev-00719 24 06/03/2023
2.0.1 21 06/03/2023
2.0.1-dev-00714 20 06/03/2023
2.0.0 18 06/03/2023
2.0.0-rc-707 16 06/03/2023
2.0.0-rc-705 23 06/03/2023
2.0.0-beta-702 17 06/03/2023
2.0.0-beta-700 20 06/03/2023
2.0.0-beta-519 17 06/03/2023
2.0.0-beta-516 19 06/03/2023
2.0.0-beta-513 16 06/03/2023
2.0.0-beta-511 21 06/03/2023
2.0.0-beta-509 21 06/03/2023
2.0.0-beta-507 18 06/03/2023
2.0.0-beta-505 17 06/03/2023
2.0.0-beta-502 21 06/03/2023
2.0.0-beta-499 20 06/03/2023
2.0.0-beta-495 19 06/03/2023
2.0.0-beta-494 15 06/03/2023
2.0.0-beta-493 21 06/04/2023
2.0.0-beta-487 19 06/04/2023
2.0.0-beta-486 20 06/04/2023
2.0.0-beta-479 16 06/04/2023
2.0.0-beta-478 15 06/04/2023
2.0.0-beta-465 15 06/04/2023