Magnus Lindhe
Magnus Lindhe

Reputation: 7327

Is it possible to check if any errors has been logged to a `ILogger` in Serilog?

Is it possible to check if any errors has been logged to a ILogger in Serilog?

var log = new LoggerConfiguration().CreateLogger();

SomeAlgorithm(log);

// How can I check if an error was logged?

Upvotes: 2

Views: 897

Answers (1)

Nicholas Blumhardt
Nicholas Blumhardt

Reputation: 31832

A custom sink can do this, in a few lines of code.

class ErrorDetector : ILogEventSink {
    volatile bool _errorDetected;
    public bool ErrorDetected { get { return _errorDetected; } }
    public void Emit(LogEvent evt) {
        if (evt.Level == LogEventLevel.Error ||
            evt.Level == LogEventLevel.Fatal) {
            _errorDetected = true;
        }
    }
}

Then:

var detector = new ErrorDetector();
var log = new LoggerConfiguration()
    .WriteTo.Sink(detector)
    .CreateLogger();

// Later
if (detector.ErrorDetected) { ...

Upvotes: 8

Related Questions