是否有与 log4net 的 BufferingForwardingAppender 等效的 SeriLog,仅用于 warning/error 上的详细日志记录?

Is there a SeriLog equivalent of log4net's BufferingForwardingAppender for detailed logging only on warning/error?

在 Serilog 中有没有办法设置一个(有限大小)日志缓冲区来收集指定级别及以上(即 DEBUG)的所有日志事件,但不会将它们记录到目标接收器中,除非某个更高级别的事件发生了(即 WARNING)?

基本上我是在问是否有办法从 log4net 复制 BufferingForwardingAppender 功能。

截至撰写本文时,Serilog 还没有开箱即用的 Log4Net BufferingForwardingAppender 等效项,但社区构建的一些接收器可能会有用:

或者,create your own Sink 实施该行为应该很容易。

在这种情况下,您可能需要查看 Serilog.Sinks.Async 的代码以获取灵感,因为它向您展示了一种将多个接收器包装成一个接收器的方法,这将使您有机会在转发之前缓冲日志消息到水槽。

最后,由于您熟悉Log4Net,您可以将Log4Net 与Serilog 集成,并通过Log4Net Serilog Sink.

使用Log4Net 的BufferingForwardingAppender

我知道有点晚了,但我今天也在找同样的东西,发现 Serilog.Sinks.Buffer, which looks to be pretty close to what we want (I haven't actually tried it yet). One limitation, compared to BufferingForwardingAppender, is that, according to the docs,

The log events that are flushed from a buffer are sent to the output sink only after the triggering event...The result is that the debug log events always end up being sent out of order, ie. after later events and after the triggering event.

这会使直接从文本文件中读取日志进行分析变得更加困难——您需要先按时间戳对文件进行排序才能理解它。