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

CAD*_*oke 6 serilog

我想将 SerilogWarning事件写入.NET 集合,以便将它们包含在给用户的报告中。如何将静态配置Log.Logger为写入类似 a 的内容static List<string<>

在提供的接收器列表中看到了Rx Observer,这是唯一一个似乎很容易使 .NET 对象可用的人,或者是否有我错过的明显替代方案?

或者,这是一种愚蠢的方法吗 - 有没有更好的方法来收集Warning事件以将其添加到面向用户的报告中?

Nic*_*rdt 6

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

不确定这个会不会打字,但这基本上是我做过几次的方式。

  • `ICollection&lt;T&gt;` 和 `ConcurrentBag&lt;T&gt;` 是无关的,但这让我走上了正确的轨道。谢谢 (3认同)