いくつかの情報をファイルに記録する Web アプリケーションがあります。C# で単純なスレッド セーフなノンブロッキング ファイル ロガー クラスを探しています。スレッドの経験はほとんどありません。log4Net、Enterprise Library Logging Block、ELMAH などの優れたロギング コンポーネントがあることは知っていましたが、アプリケーションを外部に依存させたくありません。このキューの実装を使用することを考えていましたhttp://www.codeproject.com/KB/cpp/lockfreeq.aspx
3 に答える
外部ライブラリを使用したくない場合は、Traceクラスを使用できます
オフィスのプロジェクトで簡単なロギング メカニズムを実行しました。
Shared (静的 C#) のログ クラスがあります。
このクラス内には同期キューがあり、独自のスレッドがあります。
次に、このスレッド内で、独自に定義された WaitTime (私は 250ms を使用) で AutoresetEvent を使用します。
次に、この ResetEvent がタイムアウトしたときに、現在キューにあるものを (DeQueue を使用して) 収集し、それぞれをファイルに書き込みます。
覚えておくべきこと... スレッドをスリープするのに長い時間を選択した場合に備えて、ディスクに書き込んだ時間ではなく、エントリが入った日付を保持できるクラスまたは構造体を用意してください。
アプリケーションをすぐに終了させたい場合は、イベントを設定してスリープ状態から抜け出し、正常に終了するメソッドを公開します。
FileStream.BeginWrite メソッドは、システムによって管理されるスレッドに書き込み操作をプッシュします。それは簡単なビットです。
メッセージを同期キューに入れ、EndWrite メソッドで次のアイテムをキューから取り出すと、アプリに関する限り、すべてのログはオフスレッドになります。
最後のステップは、キューにメッセージを入れてイベントを設定することです。これにより、EndWrite が次のメッセージを探しに来たときにキューが空の場合、イベントが設定されるのを待つことができます。