如何从多处理进程记录到 StringIO



我只是无法让与StringIO一起使用的StreamHandler接受来自进程的日志记录。 奇怪的是,流到标准输出工作得很好。

这是我的代码:


from time import sleep
import logging
import multiprocessing
from io import StringIO

logBuffer = StringIO()
#logging.basicConfig(level=logging.DEBUG,stream=logBuffer)
logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')

def main():
for i in range(10):
logging.debug('i=%i' % i)
print(i)
sleep(0.5)
# start process
proc = multiprocessing.Process(target=main )
proc.start()
proc.join()
print(logBuffer.getvalue())
sleep(3)

logging.basicConfig(level=logging.DEBUG)将所有内容打印到 stdout:

调试:根:这将被记录 调试:根:i=0 0 调试:根:i=1 1 调试:根:i=2 2 调试:根:i=3 3 调试:根:i=4 4 调试:根:i=5 5 调试:根:i=6 6 调试:根:i=7 7 调试:根:i=8 8 调试:根:i=9 9

在尝试使用 StringIO 捕获时,logging.basicConfig(level=logging.DEBUG,stream=logBuffer)仅捕获当前输出:

0 1 2 3 4 5 6 7 8 9 调试:root:这将被记录

有人可以帮忙吗? 也欢迎将实时输出从进程传递到父进程的其他解决方案。

我已经使用队列处理程序在日志记录食谱中找到了答案,所以我将回答我自己的问题(RTFM(;-(。

然而,一个更简单的解决方案似乎是切换到线程并将记录器实例传递给 trhead 函数。

相关内容

  • 没有找到相关文章

最新更新