是否可以检查 Serilog 中是否已将任何错误记录到“ILogger”?

Mag*_*dhe 2 serilog

是否可以检查 Serilog 中是否已记录任何错误ILogger

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

SomeAlgorithm(log);

// How can I check if an error was logged?
Run Code Online (Sandbox Code Playgroud)

Nic*_*rdt 7

自定义接收器只需几行代码即可完成此操作。

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

// Later
if (detector.ErrorDetected) { ...
Run Code Online (Sandbox Code Playgroud)