問題タブ [boost-log]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
logging - マルチDLLプログラムで一度ログシステムを初期化する方法は?
Boost Log を使用してログ システムを構築しています。私のプログラムには、プログラムをビルドするための一般的な方法である多くの DLL コンポーネントがあります。
混乱しています。各 dll で、独自のログ システムを初期化し、特定のログ ファイルに書き込む必要があります。そうしないと、DLL がログ メッセージを出力できません。そのため、私のプログラムでは、ログを何度も初期化する必要があります。Dll エントリ ポイントでログを初期化します。
このように dll が 5 つある場合、異なるログ ファイルでログを 5 回初期化する必要があり、これは膨大な作業負荷になります。
DLL全体で一度ログを初期化することは可能ですか? すべての dll でログ システムを共有したいと考えています。
または、これをサポートする他の種類のログシステムはありますか?
c++ - libboost_log_setup.a ライブラリの理由は?
最新の Boost 1.54 リリースでは、Boost.Logライブラリが登場しました。Boost 1.54 全体をコンパイルすると、Log ライブラリで 2 つのバイナリが生成されたことがわかります。
- libboost_log.a
- libboost_log_setup.a
libboost_log_setup.a
図書館の理由は何ですか?いつリンクすればいいですか?
c++ - デバッグ時にのみ Boost.Log を有効にする
デバッグ目的でロガーが必要で、Boost.Log (boost.org ホームページにパッチが適用された 1.54.0) を使用しています。
次のようなマクロを作成しました。
デバッグ モードでのみ LOG_MESSAGE( lvl ) が BOOST_LOG_TRIVIAL( lvl ) で拡張され、リリースでは無視されるようになりましたか?
例えば:
編集 私の最初の試みはヌルストリームを作成することです...リリースモードではコンパイラがそれを最適化すると思います...
c++ - 未定義の参照エラーを引き起こす CMake の Boost.Log
作業中のプロジェクトで新しい Boost.Log ライブラリを使用しようとしています。プロジェクトは CMake でビルドされています。リンカーが Boost.Log への未定義の参照に遭遇したと主張するリンク エラーを受信しています。
これらのエラーで失敗する単純な hello world テストがあります。Boost.Log ライブラリに対してリンクしている場合、未定義の参照エラーが発生する原因は何ですか?
main.cpp:
CMakeLists.txt:
編集: cmake および make からの詳細な出力
cmake:
作る:
c++ - ブースト ログを手動でフラッシュするにはどうすればよいですか?
ブースト 1.54.0 で Boost.Log を使用して、アプリケーションの実行可能なオプションであるかどうかを確認しています。一般に、バッファリングに問題はないので、auto_flush などをオンにするつもりはありません...しかし、呼び出す前にログに記録されたメッセージfork()
が重複していることに気付きました。それらはバッファリングされるため、プロセスイメージがコピーされるとバッファが複製され、最終的に両方のプロセスがバッファコピーをログファイルに書き込みます...
fork()
したがって、基本的には、メッセージがまだメモリに残っていないことを確認するために、呼び出す直前に、ログを 1 回だけ手動でフラッシュしたいと思います。つまり、ブースト ログで使用できる 、 、 などfflush()
に.flush()
似たものを探しています。<< flush
ログを使用<< flush
してみましたが、それでも重複したメッセージが表示されるため、フラッシュが原因で重複が他の問題によって引き起こされているのか、それとも何らかの形でサイレントに無視されているのかは 100% わかりません<< flush
...
編集:
私は周りを見回していて、ブーストログがフォークセーフではないことがわかりました. したがって、親プロセスと子プロセスで同じログを使用しようとしていないことを付け加えておきます。私は2つの分岐シナリオを持っています.1つは、親がすぐに終了し、子が継続する(安全であるため)、もう1つは、子が独自の別のログファイルを開く必要があるため、これも安全である必要があります...しかし、私はログ ファイル シンクを閉じてから (別のファイルで) 新しいものを開く方法を理解する必要があります。シンクを閉じることも、フラッシュを強制する方法かもしれないと思います...?
c++ - 出力をブースト ログにリダイレクトするにはどうすればよいですか?
ブースト ログを使用する C++ プログラムがあり、ユーザー提供のダイナミック リンク ライブラリをロードします。ユーザーのライブラリがいつでも実行できるように、stderr をブースト ログにリダイレクトしたいと思います。
以下と同じ結果**を生成します。
これは可能ですか?もしそうなら、どうすればいいですか?
(また、重大度についてどうすればよいかcerr <<
わかりません...重大度に関する情報を提供していないため、それに関する提案も受け付けています...)
** 「同じ結果」とは、残りのログ メッセージと同じログ ファイルに記録され、同じログ フォーマッタがそれらの行に適用されることを意味します。