Serilog.Sinks.SignalYard
1.0.0
dotnet add package Serilog.Sinks.SignalYard --version 1.0.0
NuGet\Install-Package Serilog.Sinks.SignalYard -Version 1.0.0
<PackageReference Include="Serilog.Sinks.SignalYard" Version="1.0.0" />
<PackageVersion Include="Serilog.Sinks.SignalYard" Version="1.0.0" />
<PackageReference Include="Serilog.Sinks.SignalYard" />
paket add Serilog.Sinks.SignalYard --version 1.0.0
#r "nuget: Serilog.Sinks.SignalYard, 1.0.0"
#:package Serilog.Sinks.SignalYard@1.0.0
#addin nuget:?package=Serilog.Sinks.SignalYard&version=1.0.0
#tool nuget:?package=Serilog.Sinks.SignalYard&version=1.0.0
Serilog.Sinks.SignalYard
A Serilog sink that ships log events to a SignalYard server.
Events are formatted as CLEF (Compact Log Event Format), buffered with
durable periodic batching, and delivered over HTTP to the SignalYard ingestion endpoint using an
X-Api-Key header. Message templates, structured properties, log levels, and exceptions are all
preserved.
Install
dotnet add package Serilog.Sinks.SignalYard
Quick start
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.SignalYard(
serverUrl: "https://your-signalyard.azurewebsites.net",
apiKey: "sy_your_api_key_here")
.CreateLogger();
Log.Information("User {Username} logged in from {IpAddress}", "john.doe", "10.0.0.1");
Log.CloseAndFlush(); // flush buffered events on shutdown
serverUrl is the base URL of your SignalYard server — the sink appends the ingestion path
(/api/events/raw) for you. The apiKey is the per-application ingestion key (it starts with
sy_) shown when you create an application in SignalYard.
Always call
Log.CloseAndFlush()(or dispose the logger) at shutdown so batched events aren't lost.
Configuration options
The convenience overload accepts the common knobs:
.WriteTo.SignalYard(
serverUrl: "https://your-signalyard.azurewebsites.net",
apiKey: "sy_your_api_key_here",
restrictedToMinimumLevel: LogEventLevel.Information,
batchSizeLimit: 1000,
period: TimeSpan.FromSeconds(2),
queueLimit: 100_000)
For full control, pass a SignalYardSinkOptions:
.WriteTo.SignalYard(new SignalYardSinkOptions
{
ServerUrl = "https://your-signalyard.azurewebsites.net",
ApiKey = "sy_your_api_key_here",
BatchSizeLimit = 1000,
Period = TimeSpan.FromSeconds(2),
QueueLimit = 100_000,
EagerlyEmitFirstEvent = true,
HttpTimeout = TimeSpan.FromSeconds(30),
RestrictedToMinimumLevel = LogEventLevel.Verbose,
})
| Option | Description | Default |
|---|---|---|
ServerUrl |
Base URL of the SignalYard server | (required) |
ApiKey |
Per-application ingestion key (sy_...) |
(required) |
IngestPath |
Ingestion path appended to ServerUrl |
api/events/raw |
BatchSizeLimit |
Max events per HTTP request | 1000 |
Period |
Time between batch flushes | 2s |
QueueLimit |
Max in-memory events before dropping | 100000 |
EagerlyEmitFirstEvent |
Ship the first event without waiting for Period |
true |
HttpTimeout |
Per-request HTTP timeout | 30s |
RestrictedToMinimumLevel |
Minimum level passed to the sink | Verbose |
Formatter |
CLEF formatter override | CompactJsonFormatter |
How it works
Each batch is rendered as newline-delimited CLEF (one JSON object per line) and POSTed to
{ServerUrl}/api/events/raw with a Content-Type: application/json body and an X-Api-Key
header. This is the format SignalYard expects for structured ingestion. Delivery failures are
reported through Serilog's SelfLog:
Serilog.Debugging.SelfLog.Enable(Console.Error);
Supported frameworks
netstandard2.0 and net8.0 — usable from .NET Framework 4.6.1+, .NET Core, and modern .NET.
Building from source
dotnet build -c Release
dotnet test
dotnet pack src/Serilog.Sinks.SignalYard/Serilog.Sinks.SignalYard.csproj -c Release
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Serilog (>= 4.3.1)
- Serilog.Formatting.Compact (>= 3.0.0)
- Serilog.Sinks.PeriodicBatching (>= 5.0.0)
-
net8.0
- Serilog (>= 4.3.1)
- Serilog.Formatting.Compact (>= 3.0.0)
- Serilog.Sinks.PeriodicBatching (>= 5.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 38 | 7/7/2026 |