Python: изменить формат регистратора для всех обработчиков только в субмодуле - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть три модуля, loglib, main и submod.

loglib содержит конфигурацию для моего логгера, main - моя основная программа, а submod - подмодуль.

Основной:

import os
import loglib
import logging
import submod

logger = logging.getLogger(__name__)

scriptname=os.path.splitext(os.path.basename(__file__))[0]
loglib.configure_logger(LOGFILE=scriptname,LOGLEVEL='DEBUG')

logger.info("Starting")

submod.printsomething("calling module")

logger.debug("Stopping")

submod:

import logging

logger = logging.getLogger("submod")

formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s', datefmt='%d.%m.%Y %H:%M:%  S')

for h in logging.getLogger().handlers:
    h.setFormatter(formatter)
    logger.addHandler(h)


def printsomething(text):
    logger.info("In function printsomething")
    logger.info(text)

Я пытаюсь изменить формат регистратора в субмоде (и только тот), чтобы включить имя регистратора, но это не работает. Выходные данные выше:

07.11.2018 14:58:30 INFO Starting
07.11.2018 14:58:30 INFO In function printsomething
07.11.2018 14:58:30 INFO calling module
07.11.2018 14:58:30 DEBUG Stopping

Пока я ожидаю, что вторая и третья строки будут выглядеть так:

07.11.2018 submod 14:58:30 INFO In function printsomething
07.11.2018 submod 14:58:30 INFO calling module

Так что, очевидно, получение обработчиков root-logger'ов, изменение их форматеров и добавление их в submod-logger - неправильный подход. Кто-нибудь знает, каков правильный подход?

...