我只是无法让与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 函数。