在NLog上使用AsyncWrapper后,大多数日志都丢失了

时间:2018-01-16 06:45:48

标签: asp.net asynchronous logging nlog

我正在使用 NLog 同步日志记录编写了所有日志消息,但这需要更多时间来执行。所以,我期待异步日志。但是,在实施异步日志记录后,当每秒日志超过 300 时,会丢失许多日志。但我的要求是在一秒钟内写出超过 2000 的日志。

我在NLog配置下面使用这个:

  <targets>
    <target name="asyncViewer" xsi:type="AsyncWrapper" overflowAction="Block" queueLimit="1000000" batchSize="1000" timeToSleepBetweenBatches="0">
      <target xsi:type="Chainsaw" name="viewer" address="udp://127.0.0.1:9999">
        <parameter name="exception" layout="${exception:format=Type,Message,StackTrace:separator=&#13;&#10;}" />
      </target>
    </target>

  </targets>

我该如何解决这个问题? 给我任何建议。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您使用什么logviewer-application来查看Chainsaw-target的输出?您是否尝试过使用TCP而不是UDP?

也许logviewer-application无法处理UDP包,并且需要一些帮助来通过添加newline="true"来拆分LogEvents:

  <targets>
    <target name="asyncViewer" xsi:type="AsyncWrapper" overflowAction="Block" queueLimit="1000000" batchSize="1000" timeToSleepBetweenBatches="0">
      <target xsi:type="Chainsaw" name="viewer" address="udp://127.0.0.1:9999" newline="true">
        <parameter name="exception" layout="${exception:format=Type,Message,StackTrace:separator=&#13;&#10;}" />
      </target>
    </target>
  </targets>

另见https://github.com/NLog/NLog/issues/2145