在我的nlog配置中,我已经设置了
<targets async="true">
了解所有日志记录现在都与我的应用程序工作流程异步发生。 (我注意到性能提升,特别是在电子邮件目标上)。 这让我想到了日志序列。我理解,使用异步,无法保证操作系统执行异步工作的顺序。因此,如果在我的Web应用程序中,多个请求进入相同的方法,每个请求将其出现记录到NLog,这是否真的意味着事件出现在我的日志目标中的顺序不一定是日志的顺序方法是由各种请求调用的?
如果是这样,这只是一个人必须忍受的异步的结果吗?或者我可以做些什么来保持我的日志反映正确的顺序?
答案 0 :(得分:3)
不幸的是,这是你必须要忍受的。如果保持序列很重要,则必须同步运行它。
但如果您可以在日志消息中手动维护序列号,则可能是一种解决方案。
答案 1 :(得分:0)
我知道这已经过时了,我只是在NLog上升,但是如果你看到电子邮件客户端的性能提升,你可能只想为电子邮件目标声明ASYNC?
答案 2 :(得分:0)
通过激活<targets async="true">
,NLog将不会对LogEvent序列进行重新排序。它只是激活了一个内部队列,可以更好地处理突发并启用批处理写入。
如果单个线程写入1000个LogEvent,那么它们将不会由于异步处理而变得混乱。
如果有10个线程每个都写入1000个LogEvent,则它们的日志记录将混合在一起。但是单个线程的LogEvents将按照正确的顺序。
但是请注意,<targets async="true">
默认使用overflowAction = Discard。另请参阅:https://github.com/nlog/NLog/wiki/AsyncWrapper-target#async-attribute-will-discard-by-default
有关性能的更多详细信息。另请参阅:https://github.com/NLog/NLog/wiki/performance