2016-09-28 97 views
1

我需要创建一个可以在我的python包中使用的单个记录器,但是其中一些函数实现了多处理。我希望所有这些函数都像其他所有函数一样写入相同的日志文件。使用多处理模块记录

我知道在Python 3.2+有一个内置的方式来做到这一点,但我需要支持端口到Python 2.7.x以及。

有什么代码可以很好地处理日志中的多处理和非多处理功能吗?

通常情况下,我会创建一个日志这样:

module = sys.modules['__main__'].__file__ 
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, 
       format='%(name)s (%(levelname)s): %(message)s') 
log = logging.getLogger(module) 
fh = RotatingFileHandler(arguments.o, mode='a', maxBytes=2*1024*1024, 
         backupCount=2, encoding=None, delay=0) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - % (message)s') 
fh.setFormatter(formatter) 
fh.setLevel(logging.DEBUG) 
log.addHandler(fh) 

然后输出将写入到一个文件中。它工作的很好,但是当我实现这个时,这段代码会创建多个文件,这是我不想要的。

任何想法?

谢谢

+1

你是否把这个代码放在通常的'if __name__ =='__main __':'conditional?请记住,当使用'multiprocessing'时,不是导入或函数/类定义的** everything **应该在那里。 – Bakuriu

+0

@Bakuriu - 我正在做模块级别的日志创建,因为这是一个python包。 –

回答

0

做到这一点在Python> = 3.2的功能(通过QueueHandlerQueueListener类,如所描述here)可用于在Python 2.7通过logutils项目。

+0

谢谢你。这可以用来将消息写入单个日志文件吗? –

+0

所以当我尝试将日志文件传递给多处理器时,它会抛出一个pickle错误,你能提供一个简单的例子来说明如何使用这个工具吗? –

+0

@ josh1234我链接的帖子有一个工作示例。 –

相关问题