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

换句话说,我登录到屏幕。

第二部分(多处理):我创建了几个进程(数据分析真的很费时间和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

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

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

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

于 2012-05-18T19:00:25.557 回答