PYTHON -Вход в файл и печать операторов DEBUG на консоль - PullRequest
0 голосов
/ 26 марта 2020

Я много боролся с выводом операторов Debug на консоль (+ в файл) и информацией только в файл. Это большой модуль, и я передаю объекты логгера, созданные в основном файле, всем остальным в вызовах функций.


logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%Y%m%d %H:%M',
                    filename='full_log.log',
                    filemode='w')

console = logging.StreamHandler()
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')

console.setFormatter(formatter)
console.setLevel(logging.DEBUG)
logging.getLogger('').addHandler(console)

logger_1 = logging.getLogger('logger_1')
logger_module = logging.getLogger('module')

logger_1.debug("sample debug")
logger_1.info("sample info")
fil.main(logger_module)

test / fil.py

def main(logger):
    logger.info("Hello logging!")

Информация и отладка выводятся на консоль и записываются в файл. Может кто-нибудь объяснить, пожалуйста, что я делаю не так? Как настроить уровни для печати и записи в файл?

1 Ответ

1 голос
/ 26 марта 2020

Вы устанавливаете уровень обработчика консоли на DEBUG, но вы не устанавливаете уровень FileHandler, который добавляется basicConfig вообще. Уровень, установленный в basicConfig, применяется к регистратору root, но вы регистрируетесь с помощью дочерних регистраторов, которые распространяются.

Это обходит уровень родительских регистраторов, поскольку он напрямую использует обработчики. Это объясняется в документации здесь .

Сообщения передаются непосредственно обработчикам регистраторов предков - ни уровень, ни фильтры рассматриваемых регистраторов предков не рассматриваются.

Решение не в том, чтобы использовать basicConfig, а вместо этого создать logging.FileHandler, для которого вы устанавливаете уровень.

...