如何将 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....
不确定这个是否会进行类型检查,但这基本上是我做过几次的方式。
我发现以下实现可作为参考:
我想将 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....
不确定这个是否会进行类型检查,但这基本上是我做过几次的方式。
我发现以下实现可作为参考: