問題タブ [boost-logging]
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.
c++ - 1 つのブースト ログ コアを別のブースト ログ コアに公開して登録する方法
dll と実行可能ファイルは両方とも boost::log を使用します。それらは、異なるシングルトン ログ コアを使用することになります。dllコアを実行可能ファイルに公開し、dll-coreをexe-coreに登録して、両方を1つのログファイルにリダイレクトできるようにするにはどうすればよいですか。
どこでつまずいたかを説明するために、最小限の例を書きました。
LogUser.hpp
LogUser.cpp
メイン.cpp
LogUser は LogUser.dll にコンパイルされます。LogUser のコンストラクターは、最終的にコンソールに表示されるトレース メッセージを作成します。Main はその出力をログ ファイルにリダイレクトしますが、dll 出力を同じログ ファイルにリダイレクトしません。dll には独自のログコアが含まれており、そのメッセージを最初に他のコアにリダイレクトする必要があると思います。私は問題をグーグルで検索しましたが、簡単な解決策を見つけることができませんでしたが、これはセットアップ中にメインで1行の呼び出しである必要があるように感じます. そして、dll インターフェイスのブースト ログコア シングルトンへのゲッター。
私が見逃している標準的な方法はありますか?そのログをここにリダイレクトするにはどうすればよいですか?
編集 #1: - 私のシステムでの出力と、私がやりたいことのフィクション。
編集#2:-ここで可能な解決策を見つけました。- そのヒントで問題が解決する場合は、クローンであるため、この質問を削除します。
編集 #3: 編集 #2 から提案されたソリューションを実装しました。それは機能しますが、私が望むものではありません。
基本的に、あなたはするはず#define BOOST_LOG_DYN_LINK
です。残念ながら、ログは再帰的に追加する必要がある他のライブラリを使用しているため、これは機能しません。私はで終わった#define BOOST_ALL_DYN_LINK
。すべてのブーストが動的になり、V1.59 では 30 個の dll になる可能性があります。私の最小限の例では、chrono、date_time、filesystem、log_setup、log、regex、system、および thread (.count = 8) の dll を提供する必要がありました。
したがって、結果がまさに私が望んでいたものであるにもかかわらず、それに到達する方法が異なりますが、これはこの質問を他の質問と区別します. DLL アプローチにより、コアの dll シングルトンが 1 つだけになることが保証されます。私は、dll を提供するよりも 2 つのコアを使用することを好みます。
静的にリンクしている間に同じ結果を得る方法はありますか?
c++ - リアルタイムでロギングを強化
ブーストログを使用してログを 2 つの別々のファイルに出力します。問題は、これらの出力をすぐに書き込む必要があることですが、ブーストはファイルに出力するために 200 行以上待機します。超高速の出力はしたくありませんが、1 秒に 2 回または 1 秒ごとに行うと効果的です。
この時間または各書き込み間の行数を管理する方法はありますか?
私の h ( BoostLogging.h
) :
ソース ( BoostLogging.cc
) :
c++ - 追加するブースト シンク (非グローバル) の open_mode を設定する方法
現在、ログ ファイルと標準出力にデータを書き込むためにシンクを使用しています。残念ながら、アプリケーションを再起動すると、シンクは新しいエントリをログ ファイルに追加しません。既存のデータを上書きします。私のコードは次のとおりです。
open_mode
追加するように設定する必要があるキーワードがあることがわかりました:
しかし、コンストラクターのシンクだけにこのキーワードを設定する方法を知っている人はいますか? add_file_log
世界的な影響力があると思うからです。
注: ファイル ローテーションは使用していません。
c++ - ブースト ライブラリを使用している間、私のプログラムはスレッド セーフ ロギングをサポートしていません
現在、ロギング目的で使用するクラスを作成しています。
ただし、ここで問題が 1 つあります。スレッド同期がサポートされていません。スレッドを 1 つずつ実行する場合は問題ありません。しかし、一度に 2 つ以上のスレッドを実行しているときに問題が発生します。
私が直面している問題は次のとおりです。
誰かが問題を見つけたら、解決するのを手伝ってください。
BoostLogger.h :
BoostLogger.cpp:
ソース.cpp:
これについてさらに情報が必要な場合は、私に尋ねてください。
boost ライブラリを使用して、スレッドセーフなロガーを作成したいと考えています。できれば助けてください。
もう 1 つのことは、可能であればスレッドを同時に実行する必要があることです。
ありがとう。
c++ - boost::log コンソール出力に色分けを追加するにはどうすればよいですか?
Linux で boost::log に色付きのログ出力を追加しようとしています。私は以下を読んで、これを試しました:
しかし、それは私に以下の結果を与えます:
[2016-07-11 17:23:16.328435] [0x00007f15f03d6780] [エラー] [1;31 これはエラー ログです。
色付きのログ出力をboost::logに適切に追加するには?
c++ - カスタムboost::logフォーマッタでTimeStampおよびThreadID属性を出力する方法は?
出力ログ メッセージを色分けするためにカスタムboost::logフォーマッタを使用していますが、 TimeStampおよびThreadID属性をログに追加する適切な方法が見つかりません。ファイルロギングを使用しているときは、パラメーターkeywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%"
として書き込むだけです。logging::add_file_log
次のカスタム フォーマッタで同様の効果を得たいと考えています。
c++ - Boost.log: add_file_log() 関数を使用するときに、出力が追加されたすべてのストリームに複製されるのを防ぐ方法は?
この関数を使用して、add_file_log()
ログ レコードをテキスト ファイルに保存するログ シンクを初期化します。いくつかのシンクを定義すると、次のことがわかりました。
- シンクごとにファイルが作成されます。
- 出力はすべてのファイルにコピーされます。
これは私のロガーです:
これは私のmain()
機能です:
例を実行すると、ファイルには次のものが含まれます。
a.txt_0.log
b.txt_0.log
この動作を防ぐにはどうすればよいですか? 各ファイルには、関連付けられたロガーによって生成された情報のみが保存されます。
c++ - boost::log 重大度を照会する方法は?
boost::logライブラリの単純なログを使用しており、現在設定されているロガーの重大度に応じていくつかのコードを実行したいと考えています。これは、ログ メッセージが出力される場合にのみ、ログ メッセージの構築に必要です。しかし、重大度を照会する正しい方法が見つかりません。コードは次のようにする必要があります。
さらに、メッセージが出力されることがわかっている場合、重大度の二重チェックを回避し、BOOST_LOG_TRIVIAL
マクロを使用する代わりに直接出力する方法があるでしょうか?
c++ - Boost.Log シンクが存在するかどうかを判断する
私のプロジェクトでは、boost::log xml シンクをライブラリとメイン アプリケーションで異なるファイル名で開きます。ライブラリはスタンドアロンで実行される場合があるため、独自のログを起動します。したがって、予想どおり、メイン アプリケーション ログはすべてのログ メッセージを受信し、ライブラリは作成後のログ メッセージのみを受信します。boost::log::sink::exists( type/filter/format ) のようなものでこの重複したログを回避したいのですが、何か提案がありますか、開いているシンクを一覧表示する方法はありますか? 現在、メインのアプリケーション ログ ファイルの存在を確認しているだけです。機能していますが、もろいです。
ありがとう