在 NLog 使用 AsyncWrapper 后大部分日志丢失
Posted
技术标签:
【中文标题】在 NLog 使用 AsyncWrapper 后大部分日志丢失【英文标题】:Most of the log missing after using AsyncWrapper at NLog 【发布时间】:2018-06-24 19:38:31 【问题描述】:我正在使用 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= " />
</target>
</target>
</targets>
我该如何解决这个问题? 给我任何建议。 提前致谢。
【问题讨论】:
启用内部记录器时的任何警告或错误 -> github.com/NLog/NLog/wiki/Internal-Logging ?? 未显示警告或错误。 您已从问题中排除了日志记录规则,您可以添加这些吗?请记住,它们都必须映射到 asyncViewer-target 而不是包装的 viewer-target。 你用的是什么版本的 NLog? 您是否尝试将 asyncViewer-target 的batchSize
降低到 10 或 50 ? (或者也许只有 1 个用于测试)
【参考方案1】:
您使用什么 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= " />
</target>
</target>
</targets>
另见https://github.com/NLog/NLog/issues/2145
【讨论】:
以上是关于在 NLog 使用 AsyncWrapper 后大部分日志丢失的主要内容,如果未能解决你的问题,请参考以下文章