Custom Sinks
Synchronous sink
Implement ILogSink for simple, synchronous sinks:
using Logix.Abstractions;
using Logix.Enums;
public class TcpLogSink : ILogSink
{
public void Send(LogLevel level, string formattedMessage, LogMessage logMessage)
{
// send somewhere
}
public void Dispose()
{
// cleanup
}
}
Send receives the severity level, the already-formatted string, and the full LogMessage. Consider adding a MinLevel property to let users filter messages at the sink level.
Log.Container.AddSink(new TcpLogSink());
Implement IDisposable for cleanup. The Logger calls Dispose() when the container is disposed.
Async / remote sink
For sinks that make network calls, extend CloudLogSink instead:
using Logix.Sinks;
public class CustomCloudSink : CloudLogSink
{
protected override async Task SendAsync(string formattedMessage,
LogMessage logMessage, CancellationToken ct)
{
// HTTP call, WebSocket send, etc.
}
protected override void DisposeManaged()
{
// cleanup HttpClient, etc.
}
}
CloudLogSink gives you:
- Fire-and-forget async dispatch via Task.Run
- Per-sink filtering (AddFilter, RemoveFilter, ClearFilters)
- A pluggable IMessageFormatter? Formatter property
- A MinLevel property to drop messages below a severity threshold
- IDisposable with a DisposeManaged() hook