在我的nlog配置中,我设置了
<targets async="true">
的理解,所有日志记录现在异步发生在我的应用程序工作流。(我注意到性能有所提高,尤其是在Email目标上)。这让我想到了对数序列。我明白,使用async,无法保证操作系统执行异步工作的顺序。所以,如果,在我的web应用程序中,多个请求进入同一个方法,每个记录他们的发生到NLog,这真的意味着事件出现在我的日志目标的顺序将不一定是在日志方法被各种请求调用的顺序吗?
如果是这样,这只是异步的结果吗?或者我可以做些什么来保持我的日志反映正确的顺序?
不幸的是,这是你不得不忍受的。如果维护序列很重要,则必须同步运行它。
但是如果您可以在日志消息中手动维护序列号,这可能是一个解决方案。
我知道这是旧的,我只是在NLog上增加,但如果你看到电子邮件客户端的性能提高,你可能想要断言ASYNC的电子邮件目标?
NLog不会通过激活<targets async="true">
来执行LogEvent序列的重新排序。它只是激活一个内部队列,它提供了更好的突发处理和支持批写。
如果一个线程写了1000个LogEvents,那么它们不会因为异步处理而乱序。
如果有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