4

私のnlog構成では、

<targets async="true">

すべてのロギングがアプリケーションワークフローとは非同期に行われるようになったことを理解した上で。(そして、特に電子メールターゲットでのパフォーマンスの向上に気づきました)。しかし、これは私にログシーケンスについて考えさせます。非同期では、OSが非同期作業を実行する順序が保証されないことを理解しています。したがって、私のWebアプリで、複数のリクエストが同じメソッドに着信し、それぞれがNLogに発生をログに記録する場合、これは、イベントがログターゲットに表示される順序が、必ずしもログの順序であるとは限らないことを意味します。メソッドはさまざまなリクエストによって呼び出されましたか?

もしそうなら、これは人が一緒に暮らさなければならない非同期の結果ですか?または、ログに正しい順序を反映させるためにできることはありますか?

4

3 に答える 3

3

残念ながら、これはあなたが一緒に暮らさなければならないものです。シーケンスを維持することが重要な場合は、同期して実行する必要があります。

ただし、ログメッセージでシーケンス番号を手動で維持できる場合は、解決策になる可能性があります。

于 2013-04-02T23:05:30.260 に答える
0

これは古く、NLogを増やしているところですが、電子メールクライアントのパフォーマンスが向上している場合は、電子メールターゲットに対してASYNCをアサートするだけでよいでしょうか。

于 2015-10-01T02:30:41.527 に答える
0

NLogは、をアクティブ化することにより、LogEventシーケンスの並べ替えを実行しません<targets async="true">。内部キューをアクティブ化するだけで、バーストの処理が向上し、バッチ書き込みが可能になります。

1つのスレッドが1000個のLogEventを書き込む場合、非同期処理のために順序が乱れることはありません。

それぞれが1000個のLogEventを書き込む10個のスレッドがある場合、それらのロギングは混ざり合います。ただし、個々のスレッドの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 に答える