Я видел несколько вопросов относительно объединения журналов из разных процессов при использовании модуля многопроцессорности в Python. Я хотел бы сделать обратное, создать отдельные файлы журналов для разных процессов, и они должны регистрировать все, что происходит при вызове других модулей, не будучи искалеченным. В приведенном ниже примере у меня есть основная программа (main.py) и два модуля (module1.py и module2.py), и я хочу, чтобы главный регистратор (mainlog) записывал в stdout, что он делает хорошо. Я также хочу отдельный файл для каждого процесса, включая ведение журнала из модулей1 и module2.Регистрация отдельных файлов для разных процессов в Python
main.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:
import logging
import module2
log = logging.getLogger("module1")
def do_something(i):
for j in xrange(0,100):
log.debug("do something. process %2s. iteration %2s", i,j)
module2.multiply(j,2)
И 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, ...), которые содержат сообщения от всех процессов вместе, а не только один. Ничего из модуля2.py не регистрируется. Что я делаю не так?