2

Python ロギング モジュールを使い始めたばかりで、何か理解できません。

次のように動作するスクリプトを書いています。

最初の部分(単一プロセス): 計算するデータを取得します (方法は重要ではありません)。ここでは、次の方法でロガーを作成します。

import logging
logging.basicConfig(format='%(asctime)-6s: %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('Pipeline')
logger.setLevel(logging.INFO)
logger.warning('Pipeline started')

つまり、画面にログインします。

第 2 部(マルチプロセッシング): 以前に見つかったデータを分析するために、いくつかのプロセスを作成します (データ分析は実際には時間と CPU を消費します)。

ここで、各プロセスが画面にログを記録せずに異なるファイルにのみログを記録するようにしたいと思います。

私が書いたものは次のとおりです。

fh = logging.FileHandler('/tmp/'+multiprocessing.current_process().name+'_worker.log')
fmt = logging.Formatter(%(asctime)-6s: %(name)s - %(levelname)s - %(message)s)
fh.setFormatter(fmt)
local_logger = logging.getLogger(multiprocessing.current_process().name+'_worker')
local_logger.addHandler(fh)
local_logger.warning(multiprocessing.current_process().name + ' (worker) Process started')

私が得たのは、各プロセスが異なるファイルにログを記録するが、画面にもログを記録するということです!

どうすればこれを修正できますか?

4

2 に答える 2

4

ローカル ロガーがログ メッセージを最上位に渡し、そこで出力を stdout に取得していると思われます。ローカル ロガーで伝播をオフにしてみてください。次のようにできると思います:

local_logger.propagate = False
于 2012-05-18T17:40:39.150 に答える
3

Art Swri のやり方でそれを行うことも、basicConfig()呼び出しを省略することもできます。これが、コンソール ハンドラーをルート ロガーに追加するものです。

于 2012-05-18T19:00:25.557 に答える