2016-10-06 2 views
-2

私は良い、シンプルなC + +ロギングライブラリを探していた、boost :: log、glog、pantheios、log4cplus、G3logなどを見て、誰もがスレッドセーフなライブラリだと思われる。なぜスレッドセーフなロギングライブラリがたくさんあるのですか?

もちろんスレッドセーフではありますが、なぜそれが必要ですか?スレッドごとに独自のログファイルを使用できるようにするにはどうすればいいですか?

ログファイルのマップを保持するシングルトンが中心であるとします。このキーはスレッドIDです。各スレッドはそれ自身のログに書き込みます。さらに、すべてのログファイルを1に統合するための「ログファイル統合プログラム」があります。

これは簡単な解決策ではありませんか?ロギングライブラリはもはやスレッドセーフである必要はなく、ストリームのバッファリングについても心配する必要はありません。

スレッドを育成するプログラムがいくつかありますが、そのような場合は「スレッドグループ」という概念があります。一般的に、「複数のログファイル+ 1つのコンソリデータ」を使って簡単にするのはいかがですか?私は何かを見落としましたか?

+0

99999スレッドが実行されているとし、警告/エラーがあるかどうかを確認する必要があるとします。エラーを検出するために99999ログファイルの1つをチェックする代わりにerrorsという名前のログファイルを開く方が簡単です。 –

+0

99999個のログファイルを1個にまとめることができ、エラーでフィルタリングできるビューアがあります....何が問題なのですか? – athos

+0

1週間前にクラッシュしたセッションの99999ログを検索するようにユーザーに指示すると、サポートチームにとって楽しいことになります。オープンファイル記述子の数に対するOSの制限など、考慮すべき事項はもちろんあります。 – paddy

答えて

1

私は数千のスレッドを持っていたプロジェクトに取り組んできました.99,999ほどではありませんでしたが、追加できなかった理由はありません。

1つのプロジェクトの複数のログファイルは、さまざまな理由で悪い可能性がありますが、これはほんの一例です。

お客様にすべてのファイルを問い合わせることは苦痛になります。 開いているハンドルの数が問題を引き起こす可能性があります。 ディスクスラッシングは問題を引き起こす可能性があります。 何が起こったのかを(スレッドで既に十分に難しい)どのような順序で解決しようとするのがより困難になります。

もちろん逆に 同期が問題を引き起こす可能性があります。

メインのスレッド用のログファイルが必要な場合がありますし、各ワーカーグループ用のログファイルが必要な場合もあります.Webサーバーではあまり珍しくないすべてのドメインが1つのログに入ります!?)なぜ多くの実装が存在するのか。

+0

また、面白いタイムスタンプがない限り、イベントの順序はOPが示唆するように自明ではないことに注意してください。通常、ログのタイムスタンプを一番近いマイクロ秒に保つのはうれしいですが、複数のファイルにまたがって同じ時間がかかると誤解を招く可能性があります。 – paddy

+1

主な理由の1つは、「...あなたのOSによって整理されているように、単一の大きなファイルは可能な限りハードドライブの連続セクタに書き込まれる傾向がありますが、複数の小さなファイルがそのように書かれている場合と書かれていない場合があります。増加したシーク時間は、多くの小さなファイルの読み込み時間を増加させる可能性があります。 – SChepurin

関連する問題