パフォーマンスが重要なマルチスレッドアプリケーションに取り組んでいます。 rlog、Ace、Boostのログを確認しました。 rlogを選んだのは、それが最も高速だったためです(ロギングが無効になっている場合、オーバーヘッドが最小です)。
私が持っている問題は、リリースモードでもファイル名、行番号などを表示することです。その情報を遮断する方法を教えていただければ、私の問題は解決するかもしれません。いずれにしても、私の状況で最も効率的なC++のロガーは何ですか?
残念ながら、現時点では賛成票を投じることはできません。私の知る限り、Apache log4cxxのようながらくたを使ったことはありません。重大なバグが含まれています。
私の意見では、ブーストで行く必要があります。
Pantheios が最良と考えられます C++ロギングライブラリを実行する であり、100%タイプセーフな唯一のものであると主張します( この記事を参照 printf()/ iostreamベースのライブラリがタイプセーフでない理由を説明する関連ライブラリについて)
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") );
StdioNode
の2番目の引数は、出力を制御するフラグ用です。可能なフラグの全リストについては、rlogのドキュメント(Doxygenで生成可能)を確認してください。この例の1つでは、rlogに重大度に応じて出力のみを色付けし、他の情報を追加しません。
ロゴシステムを検討することをお勧めします。 logogはまさにこの種の機能を提供しますが、Pantheosが持つ暗黙的なコード依存性はありません。 logogはスレッドセーフであり、任意の時点で記録されるメッセージの種類を高度に制御できます。
私はlogogの著者であり、メンテナーなので、私の意見は少し偏っています。しかし、これを実装する前に、rlog、Pantheos、およびその他のロギングシステムを確認しました。
オーバーヘッドの一部は、マクロ/ストリームで発生する場合があります。ロギングが無効になっている場合、ロギングされる文字列を作成しないように非常に注意する必要があります。
ストリームと?:演算子を巧妙に使用すると、マクロと同様にそれを行うことができます。
c-logライブラリ、 https://github.com/0xmalloc/c-log 、C/C++言語用の高速で安定したスレッドセーフなログライブラリを試してください。
PocoにはNice loggingサポートがあります...
多分 pantheios
スレッドセーフかどうかはわかりませんが...