私はパフォーマンスが重要なマルチスレッドアプリケーションに取り組んでいます。rlog、Ace、Boostのログを調べました。rlogを選択したのは、それが最速だったからです(ロギングが無効になっていると、オーバーヘッドが最小になります)。
私が抱えている問題は、リリースモードでもファイル名や行番号などが表示されることです。その情報を遮断する方法を教えていただければ、私の問題は解決するかもしれません。いずれにせよ、私の状況でC ++で最も効率的なロガーは何ですか?
私はパフォーマンスが重要なマルチスレッドアプリケーションに取り組んでいます。rlog、Ace、Boostのログを調べました。rlogを選択したのは、それが最速だったからです(ロギングが無効になっていると、オーバーヘッドが最小になります)。
私が抱えている問題は、リリースモードでもファイル名や行番号などが表示されることです。その情報を遮断する方法を教えていただければ、私の問題は解決するかもしれません。いずれにせよ、私の状況でC ++で最も効率的なロガーは何ですか?
回答:
残念ながら、現時点では反対票を投じることはできません。私が言うことができる限り、Apachelog4cxxのようながらくたを決して使用しないでください。深刻なバグが含まれています。
私の意見では、あなたは後押しで行くべきです。
私はhttp://logging.apache.org/log4cxx/index.htmlでlog4cxxで成功しました。これは人気のあるLog4jロガーのC ++バージョンであり、confファイルまたはコードのいずれかを介して簡単に構成できます。無効にした場合のオーバーヘッドは最小限です(メソッド呼び出しと整数比較)。
ログへの出力のパターンは、日付/時刻とメッセージのように単純な変換パターンによって定義されます。また、ファイルサイズの制限、ロールオーバーなども処理します。さまざまなエラーやソースに対してさまざまなパターンを構成することもできます。
rlogが提供する追加情報(ファイル名、行番号など)を遮断する方法は次のとおりです。main()
関数(または任意の場所)でrlogを初期化するときは、次のようにします。
rlog::RLogInit(argc, argv);
rlog::StdioNode slog (2, rlog::StdioNode::OutputColor);
slog.subscribeTo( RLOG_CHANNEL("error") );
の2番目の引数StdioNode
は、出力を制御するフラグ用です。可能なフラグの全リストについては、rlogドキュメント(Doxygenで生成可能)を確認してください。この例の例では、rlogは、他の情報を追加せずに、重大度に応じて出力に色を付けるだけです。
あなたはlogogシステムを検討したいかもしれません。Logogはまさにこの種の機能を提供しますが、Pantheiosが持っている暗黙のコード依存関係はありません。Logogはスレッドセーフであり、どのタイプのメッセージをいつでもログに記録するかを高度に制御できます。
私はlogogの作者でありメンテナーなので、私の意見は少し偏っています。しかし、これを実装する前に、rlog、Pantheios、およびその他のログシステムを確認しました。
オーバーヘッドの一部は、マクロ/ストリームで発生する可能性があります。ロギングが無効になっている場合は、ロギングされる文字列を作成しないように十分に注意する必要があります。
ストリームと?:演算子を巧みに使用すると、マクロと同様にそれを行うことができます。
C / C ++言語用の高速で安定したスレッドセーフなログライブラリであるc-loglib(https://github.com/0xmalloc/c-log)を試してみてください。
#include <pthread.h>
...)