一部の Python モジュールの集中ログ システムを作成しようとしています。多数のモジュールからログ付きのメッセージを送信できるようにしたいのですが、中央ロガーがそれらを受け取り、処理を行います。
簡単にするために、モジュール A を次のようにします。
bus = connect_to_a_bus_that_is_always_there
while True:
#Publish a message to message bus, pseudo code
bus.publish(topic="logs.a", message="example")
time sleep(1)
およびロガー(唯一のサブスクライバー)
def actOnNewMessage(msg):
if msg.topic.subtopic == "a":
doSomethingForA(msg.data)
bus = connect_to_a_bus_that_is_always_there
bus.subscribe("logs", handler=actOnNewMessage)
while True:
#wait for messages
現在、Logger モジュールはライブラリのように動作するため、永続的に実行されるわけではありません。そのため、Logger とメッセージ バスの間に新しいメッセージを常に監視する何かを導入できるかもしれません。
私はPyPubSubを見てきましたが、ドキュメントで実行中の異なる python モジュール間の永続的な通信を導入していないようです。誰かがこれを試した場合、異なるモジュール間でこれを使用できればうまくいきます。
もう 1 つの落とし穴は、Python で記述されていないモジュールになってしまう可能性があることです。そのため、モジュール A、B、および Logger の間で直接通信する必要はありません。最終的に、私のアーキテクチャは次のようになります。
上記の情報が混乱しないことを願っています。
tl;dr : Python の永続的なメッセージ バスと、新しいメッセージを常に待機しているサブスクライバーを使用したパブリッシュ-サブスクライブ。すぐに使えるソリューションはありますか?
編集: Logger モジュールを認識している Web ソケット サーバーを実行することを検討しており、他のモジュール A、B は Websocket のアドレスを認識しています。この設計に欠点はありますか?