今私は持っています:
- 一般的な静的ライブラリと動的 DLL を使用する、マルチスレッドWindows サービス。
C++
- 各スレッドは異なるタスクを実行し、異なるエラー (DB エラー、関数呼び出しエラーなど) を生成します。各スレッドはさらに として機能します
logger client
(そして、すべてのメッセージを に送信しますlogger server
)。 - 本体はまだありませんが、からのすべてのログ メッセージを処理するためのとして機能する別のスレッドです。
logger server
logger clients
次のアイデアを実用的なソリューションに実装する方法について、良いアドバイスが必要です。アイデアは、次の要件を備えたマルチスレッド サーバーにサーバー クライアント ロギング アーキテクチャを追加することです (一部の部分は自分で実装する必要がありますが、 と の基本的なアイデアだけを考慮してくださいlogger client
) logger server
。
たくさんあるはずです
log clients
(既に述べたように、これlog client
は既存の作業スレッドにすぎません)。それぞれが一意の名前または IDを持つエンティティを登録し、次の動作を行う必要があります。logger server
が稼働していて、現在動作している場合、log client
ログ メッセージの送信が開始されます。それ以外の場合(
logger server
がダウンしている場合)、 は短いタイムアウトを使用してlog client
に自分自身を登録しようと無限に試みます。log server
logger server
次の動作を持つが存在する必要があります。log server
すべてlog clients
を一意の名前または/IDで登録し、登録する新しいログクライアントが表示されるかどうかを際限なくチェックしますログサーバーは、異なるものからのすべてのメッセージを処理し
log clients
、DB、ファイルなどに書き込みます。外部アプリケーションからへの接続を確立する機会 が必要です(たとえば、すべてのスレッド アクティビティ/エラー/その他を監視するMySuperThreadViewerProgram )。接続時に、は外部アプリケーションをもう 1 つの と見なす必要があります。最も重要な要件です。
log server
log server
log client
要約すると、実装するアーキテクチャ部分は 3 つあります。
- サーバー クライアントロガー アーキテクチャ。
log clients
との間のメッセージ キュー機能log server
。また、登録できる利用可能なログ クライアントがあるかどうかlog server
を定期的にチェックします。log server
と外部アプリケーションの間のプロセス間通信log client
。後者は新しい として機能します。
logger server
を一種のログ メッセージ ルーターと見なすことに注意してください。
したがって、主な質問は次のとおりです。
上記のすべての機能を備えたソリューション(ソフトウェアフレームワーク)はありますか(これは非常に望ましい)、またはパーツごとに異なるライブラリを使用する必要がありますか?
答えが「そのような解決策はありません」の場合、私が行った選択を見直していただけますか。
- #1の場合:Pantheiosロガーフレームワークを使用。
- #2の場合:サーバークライアントアーキテクチャとメッセージキューサポートを備えたあらゆる種類の登録購読ライブラリを使用する(更新:ipcライブラリ);
- #3: Boost.Interprocess を使用- SharedMemoryを使用。
アップデート:
#2 の良い例は、この ipc ライブラリです。logger client - logger server
リレーションの説明が少し間違っていたかもしれませんが、私が実際に意味するのは、アプローチに似ており、完全に説明され、ipcライブラリに実装されています。 )。そして、この手法の一種を使用して、ロギング アーキテクチャを実装したいと考えています。しかし、どのように?
更新 2:
OSはWindowsです。ええ、知っています。Linux には、便利なツールとフレームワーク (D-Bus、Syslog) がたくさんあります。役に立つクロスプラットフォーム ライブラリへのリンクを提供してくれる人がいるかもしれません。Windows でD-Bus を介したロガー フレームワークがあるのではないでしょうか?
どんなコメントでも大歓迎です。
どうもありがとう!