2012-05-18 56 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()电话。这就是向根记录器添加控制台处理程序的原因。