NLog v2中的AsyncWrapper和BufferingWrapper有什么区别?

时间:2012-03-28 19:53:56

标签: c# logging nlog

当我注意到以下目标配置时,我正在查看一些best practices for 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网站将其描述为&#34;缓冲&#34; ....

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

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