首页 > 解决方案 > NLog:为什么 BufferingWrapper 似乎没有缓冲日志条目

问题描述

我有一个简单的 .Net 核心 (2.2) 控制台应用程序。我正在尝试将其配置为与 NLog 一起使用。为简单起见,我使用“文件”目标。我正在尝试配置缓冲包装器,因此我将目标包装如下:

<target name="bufferWrapper" xsi:type="BufferingWrapper" bufferSize="100">
   <target name="logfile" xsi:type="File" fileName="file.txt" />
</target>

当我在写入 Nlog 后立即在断点处以调试模式停止时:

Logger.Info("Hello world");

我看到日志条目已经添加到“file.txt”中。我原以为它仅在累积 100 个日志条目(如 )后才将条目刷新到文件中bufferSize=100

谢谢你的帮助

标签: c#.net-corenlognlog-configuration

解决方案


使用目标包装器时,应该写入目标包装器,而不是实际目标。

像这样的东西:

<nlog>
    <targets>
       <target name="bufferWrapper" xsi:type="BufferingWrapper" bufferSize="100">
          <target name="logfile" xsi:type="File" fileName="file.txt" />
       </target>
    </targets>
    <rules>
       <logger name="*" writeTo="bufferWrapper" /> <!-- Do not write directly to logfile -->
    </rules>
</nlog>

顺便提一句。BufferingWrapper 是一种用于延迟(甚至丢弃)日志事件的节流机制。如果性能很重要,那么应该<targets async="true">直接使用或 AsyncWrapper。


推荐阅读