2016-09-28 4 views
1

私のpythonパッケージ全体で使用できる単一のロガーを作成する必要がありますが、いくつかの関数はマルチプロセッシングを実装しています。私はこれらすべての関数が他のすべてと同じように同じログファイルに書き込むことを望みます。マルチプロセッシングモジュールでのロギングの使用

私はPython 3.2以降でこれを行う方法があることを知っていますが、私はPython 2.7.xに移植する必要があります。

ロギングにマルチプロセッシング機能と非マルチプロセッシング機能の両方でうまく機能するコードはありますか?

通常、私は、次のようなログを作成します。

module = sys.modules['__main__'].__file__ 
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, 
       format='%(name)s (%(levelname)s): %(message)s') 
log = logging.getLogger(module) 
fh = RotatingFileHandler(arguments.o, mode='a', maxBytes=2*1024*1024, 
         backupCount=2, encoding=None, delay=0) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - % (message)s') 
fh.setFormatter(formatter) 
fh.setLevel(logging.DEBUG) 
log.addHandler(fh) 

その後、出力は単一のファイルに書き込みます。それは素晴らしいですが、私がこれを実装するとき、このコードは複数のファイルを作成しますが、私は望ましくありません。

アイデア?

+1

このコードを通常の 'if __name__ == '__main __':'条件付きの中に入れていますか? 'multiprocessing'を使うときには、インポートや関数/クラスの定義ではない**すべての**がそこになければならないことに注意してください。 – Bakuriu

+0

@Bakuriu - これはPythonパッケージ用であるため、モジュールレベルでログ作成を行っています。 –

答えて

0

に(hereが説明するように、QueueHandlerQueueListenerクラス経由)のPython> = 3.2でこれを行うための機能をいただき、ありがとうございますlogutilsプロジェクトを通じてのPython 2.7で利用可能です。

+0

ありがとうございます。これを使用して、単一のログファイルにメッセージを書き出すことはできますか? –

+0

ログファイルをマルチプロセッサに渡そうとすると、ピクルエラーが発生します。このツールの使い方の簡単な例を教えてください。 –

+0

@ josh1234私がリンクしている投稿には、実例があります。 –

関連する問題