Webアプリケーションがあり、ファイルに情報が記録されています。私は単純なスレッドセーフ非ブロッキングファイルロガークラスをC#で探しています。私はスレッディングに関する経験がほとんどありません。 Log4Net、Enterprise Library Logging Block、ELMAHのような優れたロギングコンポーネントがあることはわかっていましたが、私のアプリケーションに外部依存は望んでいません。このキュー実装の使用について考えていたhttp://www.codeproject.com/KB/cpp/lockfreeq.aspxCでのスレッドセーフなノンブロッキングファイルロガークラス#
1
A
答えて
0
FileStream.BeginWriteメソッドは、システムによって管理されているスレッドに書き込み操作をプッシュします。それは簡単なビットです。
メッセージを同期キューに入れ、EndWriteメソッドで次のアイテムをキューから取り出すと、アプリケーションに関するすべてのログがスレッド外になります。
最後のステップは、メッセージをキューに入れてイベントを設定することで、EndWriteが次のメッセージを探すときにキューが空の場合、イベントが設定されるのを待つことができます。
1
あなたは外部ライブラリを使用したくない場合、あなたは私がオフィスで私のプロジェクトでは、単純なロギングメカニズムをやったTraceクラス
0
を使用することができます。
共有クラス(静的C#)があります。
私はこのクラスの中に同期キューを持っていて、それ自身のスレッドを持っています。
このスレッドの内部では、自分で定義したWaitTime(私は250msを使用します)でAutoresetEventを使用しています。
このResetEventがタイムアウトすると、現在キューにあるもの(DeQueueを使用)が収集され、それぞれがFileに書き込まれます。
覚えておくべきこと...ディスクに書き込んだ時間ではなく、エントリが入った日付を保持できるクラスまたは構造体を用意してください。
アプリケーションをすぐに終了したい場合は、イベントをスリープから外して正常に終了するようにイベントを設定するメソッドを公開します。
関連する問題
- 1. スレッドセーフなC++スタック
- 2. C#:スレッドセーフなイベント
- 3. C++スレッドセーフなブラケットオペレータプロキシ
- 4. スレッドセーフなインクリメントC#
- 5. スレッドセーフなシングルトンオブジェクト(objective-c?)?
- 6. C++でのスレッドセーフなシングルトン実装
- 7. Cのスレッドセーフ?
- 8. C++マップのスレッドセーフ
- 9. C#スレッドセーフな高速(est)カウンタ
- 10. C Pthreads - スレッドセーフなキューインプリメンテーションの問題
- 11. C/C++のインライン関数はスレッドセーフな方法ですか?
- 12. PHPスレッドセーフでWindows用でないスレッドセーフ
- 13. posix C write()とスレッドセーフ
- 14. C:ファイルへのスレッドセーフのログ
- 15. C++マルチスレッド:スレッドセーフなメモリ割り当て
- 16. スレッドセーフC#が動作しない
- 17. C++ 11乱数ジェネレータのスレッドセーフ
- 18. フリーとmallocのVisual C++スレッドセーフ?
- 19. このコードはC++のスレッドセーフです
- 20. MaxMindのGeoIP C実装スレッドセーフですか?
- 21. C++のstd :: setはスレッドセーフですか?
- 22. このコードはスレッドセーフですか? C#
- 23. C APIのスレッドセーフなC++ラッパーを書く努力
- 24. スレッドセーフな列挙、Cでのコレクションの追加または削除#
- 25. C++でのアトミック変数のスレッドセーフな初期化
- 26. C++でスレッドセーフなメソッドを実装する適切な方法11
- 27. Indyのグローバルでスレッドセーフなクッキーマネージャー
- 28. Androidでのスレッドセーフなプログレッシブダウンロード
- 29. CのスレッドセーフなDBMライブラリとは何ですか?
- 30. ファイル書き込みスレッドセーフC++
外部依存関係が必要ない場合は、Traceクラスに投票します。また、多くの開発者は、アプリケーションの複雑さを考慮せずにLog4netやEnterprise Libなどのコンポーネントを追加するだけです。 .NETのDebugクラスとTraceクラスは、多くの中小規模のアプリケーションで十分です。設定項目を変更するか、独自のTraceListenerを記述して、動作をカスタマイズできます。 – A9S6