私の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)
その後、出力は単一のファイルに書き込みます。それは素晴らしいですが、私がこれを実装するとき、このコードは複数のファイルを作成しますが、私は望ましくありません。
アイデア?
は
このコードを通常の 'if __name__ == '__main __':'条件付きの中に入れていますか? 'multiprocessing'を使うときには、インポートや関数/クラスの定義ではない**すべての**がそこになければならないことに注意してください。 – Bakuriu
@Bakuriu - これはPythonパッケージ用であるため、モジュールレベルでログ作成を行っています。 –