⚡ v0.1 — Now on NuGet

The intelligent logger
for C# architects

Deep, structured, seamless. SinkSharp gives your .NET services sub-microsecond logging with built-in PII masking, correlation propagation, and a real-time local dashboard — no Seq licence needed.

dotnet add package SinkSharp.Core
MIT licencenet9.0 MEL-compatibleILogger drop-inZero config
~160ns
Hot path per Log() call
0 B
Allocation below min level
32%
Faster than Serilog
50k
Default queue capacity
MIT
Free forever
Why SinkSharp
Precision. Intelligence. Seamless.
Built for .NET engineers who need production-grade logging without configuration overhead or a Seq bill.
Sub-microsecond hot path
Async bounded channel queue. Your threads enqueue in ~160ns and return — enrichment, formatting, and disk writes happen on a dedicated background thread.
Built-in PII masking
Regex-based masking for emails, credit cards, SSNs, and phone numbers runs before any sink writes. Zero sensitive data reaches your log files.
Correlation propagation
AsyncLocal context carries the correlation ID across every await boundary. One line in middleware tags every log in a request automatically.
Local dashboard — free
Embedded Kestrel at localhost:5341. Real-time log stream via SignalR, level filters, correlation trace, full-text search. Seq costs $500/yr. This costs nothing.
Health check built in
One line to register with ASP.NET Core's health system. Reports Healthy / Degraded / Unhealthy based on drop rate and queue pressure.
Azure-native enricher
Reads App Service and AKS environment variables at startup — zero runtime cost. Region, resource group, slot name, and pod name on every event.
How SinkSharp compares
FeatureSerilogNLogSinkSharp
MEL-compatible ILogger✓✓✓
Built-in PII masking✗✗✓
Correlation ID auto-propagationManualManual✓ Auto
Azure resource contextPluginPlugin✓ Built-in
Local web dashboardSeq ($500/yr)✗✓ Free
Built-in health check✗✗✓
Hot path allocation~248 B~220 B~160 B
LicenceApache 2BSDMIT
Documentation
Everything in one place
From five-minute quick start to advanced custom sinks — structured for every level.
NuGet packages
Install only what you need
Start with Core — add sinks and enrichers as you grow.
SinkSharp.Core
The foundation — pipeline, builder, MEL integration, health check. Required by all other packages.
✓ v0.1.0 stable
SinkSharp.Sinks.Console
Colored, grouped console output with level badges, service names, and correlation IDs.
✓ v0.1.0 stable
SinkSharp.Sinks.File
Rolling daily JSONL files. Each line is valid JSON — easy to import into Elasticsearch or Azure Monitor.
✓ v0.1.0 stable
SinkSharp.Sinks.Dashboard
Embedded Kestrel at localhost:5341 with real-time SignalR log viewer. Free alternative to Seq.
🚧 v0.2.0 preview
SinkSharp.Enrichers.Azure
Azure App Service and AKS context at zero runtime cost. Region, resource group, pod name on every event.
✓ v0.1.0 stable
SinkSharp.AI
Natural language log querying. Ask "why did my API fail at 3pm?" — answered from your buffered events.
📋 v0.3.0 planned
Performance
Faster than Serilog. Fewer allocations.
Measured on .NET 9 with BenchmarkDotNet. Hot-path cost is what your application threads actually pay per Log() call.
MethodMeanAllocatedVisualvs Serilog
MEL NullLogger (baseline)0.5 ns0 B
—
Log below min level1.2 ns0 B
free
SinkSharp — no enrichers160 ns112 B
48% faster
SinkSharp — all enrichers210 ns160 B
32% faster
Serilog async file310 ns248 B
baseline

Run your own: dotnet run -c Release --project benchmarks/SinkSharp.Benchmarks

Why the hot-path is the only number that matters: SinkSharp uses an async bounded channel. Your application thread pays only the enqueue cost (~160ns). A slow sink cannot slow down your API.

Observability
Monitor your logging pipeline
One line registers SinkSharp as an IHealthCheck — your /health endpoint shows whether logging is keeping up.
builder.Services.AddSinkSharpWithHealth(options => options .MinimumLevel(LogLevel.Information) .WithCorrelationId() .WithPiiMasking() .WriteTo(new ColoredConsoleSink())); app.MapHealthChecks("/health");
✓ Healthy
Zero drops. Queue pressure normal. Processed 45,230 events.
⚠ Degraded
Queue pressure: 12,000 events pending. Sink may be slow. No drops yet.
✗ Unhealthy
Dropped 43 log events. Drop rate: 0.09%. Check sink performance.
Architecture
Four-stage pipeline
Every log event flows through four stages on a background thread — your calling thread only pays for the enqueue.
1
Filter
Events below the minimum level are dropped before any allocation. IsEnabled() costs ~1ns.
MinimumLevelIsEnabled()
2
Enrich
Enrichers run in order, adding properties. PII masking, correlation ID, Azure context — all run here.
IEnricherIPropertyBagPiiMaskingEnricher
3
Format
The message template renders by substituting {Name} tokens from properties. Pooled StringBuilder — minimal allocations.
IFormatterDefaultFormatter
4
Route
Events fan out to all sinks concurrently. Errors go to the unbounded critical channel — never dropped.
ISinkTask.WhenAllCriticalChannel
Roadmap
What's coming
Features are prioritised by community feedback on GitHub.
v0.1.0 — Released
Core pipeline + Console + File sinks
Async channel queue, PII masking, correlation propagation, rolling file, colored console.
v0.1.0 — Released
Azure enricher + Health check integration
App Service / AKS context enricher, IHealthCheck with AddSinkSharpWithHealth().
v0.2.0 — Preview
Dashboard sink — free Seq alternative
Embedded Kestrel + SignalR real-time viewer at localhost:5341. Filters, trace, search.
v0.2.0 — Planned
Azure Monitor / App Insights sink
Cost-aware routing — debug to cheap storage, errors to App Insights.
v0.3.0 — Future
SinkSharp.AI — natural language log querying
Ask your logs questions in plain English via the Anthropic API. The dashboard search becomes an AI copilot.

Start logging with precision today

Free forever. MIT licence. One NuGet package. No Seq, no Docker, no overhead.

Read the docs →
dotnet add package SinkSharp.Core