12
私はPythonで3つのクラスを持ち、それらは異なるスレッドで実行されます。私はすべてのクラスから同じファイルに出力したいと思います。今はメインクラスで出力メソッドを作成し、コンストラクタを介して他のクラスに渡しています。それをよりうまく処理する方法はありますか?コンローラを使用する以外は、クラス間でロガーをどのように渡すことができますか?Pythonでのクラス間のロギング
おそらくpythonはJavaの静的メソッドのようなものをサポートしているので、3つのクラスすべてでLogger.info(メッセージ)のように書くことができますか?
もう一つの方法は、おそらく、すなわち
logger = open('debug.txt', 'w')
sys.stdout = logger
次に使用して呼び出しは、すべてのクラスではsys.stdout指定して、ファイルにグローバルsys.stdoutのをリダイレクトすることができます。
あなたはどう思いますか?
@ lazyr。答えてくれてありがとう。 3つのファイルすべてが同じログファイルに書き込まれるように、クラス間でログオブジェクトをどのように渡すことができますか? – yart
私は上記のコードを別のファイル、例えばlog.pyとし、私は他の各モジュールの "log import logから"に行きます。 Pythonは一度モジュールをロードするだけです。最初のimport文はすでにロードされているものをフェッチするだけなので、すべてのスレッドで同じログオブジェクトになります。 –
@lazyr: 'logging'モジュールの場合、それをする必要はありません。' logging'モジュール自体は、自身が作成したロガーを独自モジュール内に保持します。別のモジュールで 'logging.getLogger'をもう一度実行すれば、同じオブジェクトを取得できます。 – nosklo