在使用Python中的多处理模块时,我看到了一些关于将来自不同进程的日志放在一起的问题。我想做相反的事情,为不同的进程生成单独的日志文件,它们应该记录调用其他模块时发生的所有事情,而不会被破坏。在下面的例子中,我有一个主程序(主.py)和两个模块(module1.py和module2.py),我希望主日志(mainlog)写入stdout,这很好。我还希望为每个进程提供一个单独的文件,包括来自module1和module2的日志记录。在
在主.py公司名称:
import logging
import multiprocessing as mpr
import module1
import sys
mainlog = logging.getLogger("main")
h = logging.StreamHandler(sys.stdout)
mainlog.addHandler(h)
logging.root.setLevel(logging.DEBUG)
for i in xrange(0,3):
mainlog.info("Starting process ... %s", i)
log = logging.getLogger("module1")
h = logging.FileHandler("process_{0}.log".format(i))
fmt = logging.Formatter(fmt="%(levelname)-10s:%(filename)-20s:%(message)s")
h.setFormatter(fmt)
log.addHandler(h)
log.setLevel(logging.DEBUG)
p = mpr.Process(target=module1.do_something, args=(i,))
p.start()
一个module1.py:
^{pr2}$和module2.py:
import logging
log = logging.getLogger("module2")
def multiply(x,y):
log.debug("... multiplying %s x %s = %s", x,y, x*y)
return x*y
相反,我得到以下输出:
Starting process ... 0
Starting process ... 1
No handlers could be found for logger "module2"
Starting process ... 2
No handlers could be found for logger "module2"
No handlers could be found for logger "module2"
以及3个单独的日志文件(process_0.log,…),它们一起包含来自所有进程的消息,而不是只有一个。module2.py中没有记录任何内容。我做错什么了?在
我最终创建了一个日志记录。记录器管理在主日志记录和磁盘日志记录之间的切换。现在,我可以在流程内进行必要的切换:
您需要在子进程中配置日志记录。它们一开始就一清二楚,日志记录没有在其中配置。你在窗户上吗?在Windows中,几乎没有任何东西从父进程继承到子进程,而在POSIX上,
fork()
语义可以允许某些东西被继承。在相关问题 更多 >
编程相关推荐