【问题标题】:What is the difference betwen AsyncWrapper and BufferingWrapper in NLog v2?NLog v2 中的 AsyncWrapper 和 BufferingWrapper 有什么区别?
【发布时间】:2012-04-12 11:14:15
【问题描述】:

当我注意到以下目标配置时,我正在查看一些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 网站将两者都描述为“缓冲”......

【问题讨论】:

    标签: c# logging nlog


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如果使用slidingTimeoutBufferingWrapper 看起来(现在)是异步的。 github.com/nlog/nlog/wiki/BufferingWrapper-target
      • 只有在刷新超时之前缓冲区没有被填满
      • @Juha > 我假设这意味着 BufferingWrapper 可以安全地在 Azure Functions 中使用,而没有函数超出范围的风险缓冲消息写入目标之前,是对吗?
      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2020-05-16
      • 2021-06-18
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多