4

在我的 nlog 配置中,我设置了

<targets async="true">

了解所有日志记录现在与我的应用程序工作流程异步发生。(而且我注意到性能有所提高,尤其是在电子邮件目标上)。这让我想到了日志序列。我知道对于异步,无法保证操作系统执行异步工作的顺序。因此,如果在我的 Web 应用程序中,多个请求进入同一个方法,每个请求都将它们的发生记录到 NLog,这是否真的意味着事件出现在我的日志目标中的顺序不一定是日志的顺序方法被各种请求调用?

如果是这样,这只是一个人必须忍受的异步的结果吗?或者我可以做些什么来让我的日志反映正确的顺序?

4

3 回答 3

3

不幸的是,这是你必须忍受的。如果保持序列很重要,则必须同步运行它。

但是,如果您可以在日志消息中手动维护一个序列号,那么它可能是一个解决方案。

于 2013-04-02T23:05:30.260 回答
0

NLog 不会通过激活<targets async="true">. 它只是激活一个内部队列,提供更好的突发处理并启用批量写入。

如果单个线程写入 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

于 2020-04-05T21:22:29.813 回答
0

我知道这是旧的,我只是在增加 NLog 但如果您看到电子邮件客户端的性能提高,您可能只想为电子邮件目标断言 ASYNC?

于 2015-10-01T02:30:41.527 回答