【发布时间】:2020-01-20 11:43:56
【问题描述】:
Serilog 中有没有办法设置一个(有限大小)日志缓冲区,收集指定级别及以上(即DEBUG)的所有日志事件,但除非某个更高级别,否则不会将它们记录到目标接收器事件发生(即WARNING)?
基本上我在问是否有办法从 log4net 复制 BufferingForwardingAppender 功能。
【问题讨论】:
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,看起来非常接近我们想要的(我还没有真正尝试过)。与 BufferingForwardingAppender 相比,一个限制是 according to the docs,
从缓冲区刷新的日志事件被发送到输出 仅在触发事件后才下沉...结果是调试 日志事件总是最终被乱序发送,即。后来 事件和触发事件之后。
这会使直接从文本文件中读取日志进行分析变得更加困难——您需要先按时间戳对文件进行排序才能理解它。
【讨论】: