LoggerHelper vs Serilog vs NLog

LoggerHelper is a Serilog orchestrator, not a replacement: it routes log levels to sinks from JSON and keeps ILogger<T> in your code. This page says what that buys you and what it costs.

What you get out of the box

LoggerHelper v5Serilog (plain)NLog
Per-level sink routing via JSONNative (Routes[].Levels)Sub-loggers / expressions in codeFilteringTargetWrapper / rules
ILogger<T> without code changesYesVia bridgeYes
Modular sinks as NuGet packagesYes (10 sinks, auto-discovered)Yes (manual configuration)Yes
Sink health / error diagnosticsBuilt in (ILoadedSinkStore, ILogErrorStore)Self-log onlyInternal log only
Embedded dashboardOptional package——
MCP server for AI assistantsOptional package——
OpenTelemetry trace correlationYesPartialVia extension
Maturity and ecosystemYoung, smallStandard, hugeEstablished

The overhead, stated plainly

BenchmarkDotNet, .NET 9, no-op sink (framework overhead only, no I/O). Single message:

LibraryMeanAllocated
NLog~94 ns176 B
Serilog~182 ns384 B
LoggerHelper~592 ns1152 B

LoggerHelper costs roughly 3× plain Serilog per message. For a typical web API this is negligible next to the I/O of the sink itself. For a hot path logging millions of events per second, use Serilog directly. Full tables: benchmarks.md.

Which one should you pick?

Pick LoggerHelper when you want to change which sink gets which level by editing JSON, install sinks as packages, and see sink health without extra infrastructure.

Pick plain Serilog when you need maximum throughput, a mature ecosystem, or full programmatic control of the pipeline. LoggerHelper sits on top of it, so you can migrate later.

Pick NLog if you already have NLog rules and targets that work, or you prefer its XML configuration model.

Calling third-party APIs? See the HttpHelper comparison with Refit and Flurl.

Try it

$ dotnet add package CSharpEssentials.LoggerHelper
View on NuGet Star on GitHub