如何将 Serilog 事件写入 .NET 集合?

How do I write Serilog events to a .NET collection?

我想将 Serilog Warning 事件写入 .NET 集合,以便将它们包含在给用户的报告中。我如何 configure the static Log.Logger 写入类似 static List<string<> 的内容?

我看到了 Rx Observer in the list of provided sinks,这是唯一一个似乎很容易使 .NET 对象可用的版本,或者是否有一个明显的替代方案我错过了?

或者,这是一种愚蠢的方法吗 - 是否有更好的方法来仅收集 Warning 事件以整合到面向用户的报告中?

class CollectionSink : ILogEventSink {
    public ICollection<LogEvent> Events { get; } = new ConcurrentBag<LogEvent>();

    public void Emit(LogEvent le) {
        Events.Add(le);
    }
}

var col = new CollectionSink();
Log.Logger = new LoggerConfiguration()
    .WriteTo.Sink(col, LogEventLevel.Warning)
    .CreateLogger();

// read col.Events....

不确定这个是否会进行类型检查,但这基本上是我做过几次的方式。

我发现以下实现可作为参考:

  1. CollectionSink from the Serilog Timings tests
  2. InMemorySink from Serilog.Sinks.InMemory