5

C++ で書かれたリアルタイム システムを使用しています。ロギングには、boost または pantheios のいずれかを使用することを検討しています。システムには、どちらのフレームワークでも満たすことができると確信しているいくつかの標準的なログ要件がありますが、さらに、このシステムによってキャプチャされたすべての入力をログに記録できるようにしたいと考えています。この入力は、リアルタイムの制約があり、非効率的なロギングによる大幅な遅延を許容できない一部のスレッドを含む、複数のスレッドによってキャプチャされます。これにより、ログに記録されるデータのスループットが高くなります。

私は主に、タイム クリティカルなスレッドを遅延させることなく、複数のスレッドからのこのような高スループットのログを管理するために、どちらのフレームワークも信頼できるかどうかを知りたいと思っています。さらに、セキュリティで保護されたデータを持つキャプチャ入力を識別し、データ スクラビング フックを実行し、既にスクラブされた値のマッピングを含むバッファーを維持できる何らかのフックを追加する必要があるデータ スクラビングを行う必要がある場合があります。

両方のロギング プラットフォームでこれを実行できると思いますが、API を一目見ただけではわかりません。これらのロギング ツールのいずれかを使用したことがある人は、このコンテキストでどれだけ効率的か、説明したことを実装するのがどれほど簡単か、または 2 つのロギング フレームワーク間の好みについてフィードバックをもらえますか? 本当にどんな情報も役に立ちます。

ありがとう

4

3 に答える 3

6

大きなマルチスレッドの状況でログを記録しました。私の経験は次のとおりです。

  • ロギングは、開発者の利益のためにのみ存在します。他の誰もログ ファイルを読んだり理解したりすることはありません。

  • ログ メッセージの生成と、それらがログに記録される方法を分離します。

  • ログメッセージの生成をより効率的にしたい場合は、最初に迅速なコンテキストを使用し、このコンテキストをログに記録しているものがないかどうかを確認し、生成しない場合は生成しません。それ以外の場合は、メッセージを生成します。(この手法の最も一般的な用途は、「デバッグ」「情報」などの「レベル」であり、そのレベルに何も記録されていない場合、メッセージは作成されません)。

  • 各ユース ケースには、そのユース ケースにとどまる特別な ID が生成されている必要があり、そこからログに記録されたものはすべて、このユース ケース ID を表示します。

  • メッセージを生成したスレッド ID も記録します。

  • メッセージを生成するスレッドとは別のスレッドを使用してログを記録します。(boost のログ ライブラリはこのようにします)

  • FILELINEなどを自動的に追加する軽いマクロは問題ありませんが、「マクロ狂」になることに注意してください。

于 2011-02-18T14:25:41.170 に答える
2

Jon Torjo によって作成された Boost ロギング ライブラリを使用しています。これは、専用スレッドからログ ファイルへのすべての書き込みを行うことを提案しているため、ロギングを行うスレッドで I/O 遅延が発生しません。これには、内部キューを使用するため、システムがクラッシュしたときに一部のログステートメントがログに記録されない可能性があるという欠点があります。

しかし、一般的に、このライブラリは非常にうまく機能し、さまざまなオプションを提供します。メッセージを犠牲にしたい場合は、良いオプションになると思います.

それができない場合は、ログが必要なスレッドから I/O を実行する必要がありますが、これはリアルタイム システムでは理想的ではありません。

Windows で実行している場合は、それが RT OS ではないことを知っていますよね?

于 2011-02-18T14:23:02.017 に答える
0

http://www.logog.orgを検討してください。私がこの記事を書いたときに扱っていたのと同じ問題の多くを扱っているようですね。私は元々、タイム クリティカルなレンダリングの本質であるマルチスレッド オーディオ DSP エンジンをログに記録するために作成しました。

https://stackoverflow.com/questions/696321/best-logging-framework-for-native-cも参照してください

于 2012-03-21T17:56:08.407 に答える