Python日志记录:每个进程的不同日志目标

时间:2012-05-18 17:03:05

标签: python logging multiprocessing

我刚刚开始使用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 个答案:

答案 0 :(得分:3)

怀疑您的本地记录器正在将其日志消息向上传递到顶级,并将其输出到stdout。尝试关闭本地记录器上的传播。我相信你可以这样做:

local_logger.propagate = False

答案 1 :(得分:3)

你可以用Art Swri的方式做,或者只是省略basicConfig()电话。这就是为根记录器添加控制台处理程序的原因。