在NLog v2中,AsyncWrapper和BufferingWrapper之间有什么区别

本文关键字:之间 BufferingWrapper 什么 区别 AsyncWrapper NLog v2 | 更新日期: 2023-09-27 18:29:14

当我注意到以下目标配置时,我正在查看NLog的一些最佳实践:

<targets async="true">
  <default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/>
  <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
  <!-- other stuff -->
</targets>

据我所知,这将使用AsyncWrapper和BufferingWrapper包装文件目标。。。

两者之间有什么区别?我需要两者吗,因为NLog网站将两者都描述为"缓冲"。。。。

在NLog v2中,AsyncWrapper和BufferingWrapper之间有什么区别

一旦缓冲区中有足够的消息(由bufferSize参数指定),BufferingWrapper就会阻止消息并将其写入目标。调用方将需要等待,直到写入完成。

AsynWrapper使用一个单独的线程来处理写入。调用会立即返回,调用者可以继续工作,稍后会写入日志。

BufferingWrapper起到了节流阀的作用,因此它在将消息写入实际目标之前对消息进行排队。例如,每1分钟写一封包含所有警报的电子邮件。

AsyncWrapper使用后台线程来写入实际目标,因此不会阻止应用程序代码日志记录。当多个应用程序线程登录到同一目标时,AsyncWrapper提高了并发性。AsyncWrapper还通过小批量写入而不是一次写入一个LogEvent来提高目标吞吐量。