IIS6 または 7 で実行される ISAPI フィルターがあります。複数のワーカー プロセス (「Web ガーデン」) がある場合、フィルターは各 w3wp.exe で読み込まれて実行されます。
フィルタがそのアクティビティを 1 つの統合ログファイルに効率的に記録できるようにするにはどうすればよいですか?
異なる (同時) プロセスからのログ メッセージが互いに干渉してはなりません。つまり、w3wp.exe のいずれかから出力された 1 つのログ メッセージは、ログ ファイル内の 1 つの連続した行として認識される必要があります。
ログファイルの競合は最小限に抑える必要があります。Web サイトは、1 秒あたり数百のリクエストを処理する場合があります。
厳密な時間順が優先されます。つまり、w3wp.exe プロセス #1 が t1 でメッセージを送信し、次にプロセス #2 が t2 でメッセージを送信し、次にプロセス #1 が t3 でメッセージを送信した場合、メッセージは適切な時間順にログ ファイルに表示されます。
私が現在行っているアプローチは、各プロセスが個別のログファイルを所有するというものです。これには明らかな欠点があります。
いくつかのアイデア:
w3wp.exe の 1 つを「ログファイルの所有者」に指名し、その特別なプロセスを通じてすべてのログ メッセージを送信します。これには、ワーカー プロセスのリサイクルの場合に問題があります。
OS ミューテックスを使用してログファイルへのアクセスを保護します。これで十分な高性能ですか?この場合、各 w3wp.exe は同じファイルシステム ファイルに FILE を持ちます。書き込みごとにログファイルをフラッシュする必要がありますか? これは機能しますか?
助言がありますか?