Это ошибка в модуле регистрации?
Нет.Во-первых, выходные данные различны (скопировал ваш код в test.py
):
PS C:\Users\Matt> python test.py
hello
I was executed.
bye
против
PS C:\Users\Matt> python test.py -d
hello
I was executed.
==> test, <module> loggging all the things...
bye
Во-вторых, если вы позвоните logme()
в любой точке вашей программы "I was executed"
будет распечатан на вашем экране.Это потому, что logme()
содержит утверждение print('I was executed ☠')
.Это конкретное поведение не имеет отношения к модулю logging
.Он выводится на экран, потому что вы вызываете функцию logme
, когда вы делаете:
logging.debug('{}'.format(logme()))
Однако регистрация не совпадает с печать , поэтому мы видим разные результаты."I was executed"
будет всегда печататься при вызове, но учтите, что "==> test, <module> loggging all the things..."
было зарегистрировано только logged , когда указан флаг -d
.Просто так получилось, что вы настроили свою конфигурацию регистрации на print , когда она вызывается (то есть logging.basicConfig(format='==> %(module)s, %(funcName)s %(message)s', level=logging.ERROR
).Вы можете войти в файлы или делать другие вещи такого рода.
Использование строк формата с модулем logging
:
Более того, если вы хотите использовать строку формата с регистратором,вы на самом деле делаете это с помощью стиля "%", но вы не на самом деле хотите предоставить строку форматирования.Вместо этого предоставьте свои форматы как аргументы.Вы сделаете это, потому что тогда подстановка формата не произойдет, если регистратор не будет вызван на соответствующем уровне .Подстановка в строку формата является относительно дорогой операцией, особенно если (например) один из ваших операторов отладки находится в цикле.Пример того, что я имею в виду (замените ваше заявление logging.debug
на приведенное ниже):
# logging.debug('{}'.format(logme()))
logging.debug('Some %s format %s string', 'first', 'second')
Тогда мы получим:
PS C:\Users\Matt> python test.py
hello
bye
и:
PS C:\Users\Matt> python test.py -d
hello
==> test, <module> some first format second string
bye
НТН.