2012-05-18 154 views
1

我剛開始使用Python日誌記錄模塊,我無法理解某些內容。Python日誌記錄:每個進程的不同日誌記錄目標

我正在寫一個腳本,在工作方式如下:

第1部分(單進程):它得到一些數據來計算(這並不重要如何)。 在這裏,我以下列方式創建一個記錄:

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') 

換句話說,我登錄到屏幕上。

第二部分(多處理):我創建了幾個進程(數據分析真的是時間和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') 

我得到了什麼是每個進程的日誌到不同的文件,但日誌也給屏幕!

我該如何解決這個問題?

回答

2

懷疑您的本地記錄器將其日誌消息向上傳遞到最高級別,並將其輸出到stdout。嘗試關閉本地記錄器上的傳播。我相信你可以做這樣的:

local_logger.propagate = False 
+0

我可能會補充說,使用basicConfig()可能不是您的情況恕我直言最適合的選擇。正如我的同事傑森指出的那樣,它確實意味着非常簡單的日誌設置。我建議您考慮使用更復雜的方法;通過Google搜索很容易找到幾種方法。 –

3

你可以做到這一點藝術SWRI的方式,或只是省略basicConfig()電話。這就是向根記錄器添加控制檯處理程序的原因。