Я только что обнаружил другое поведение ведения журнала Python, в зависимости от того, использую ли я ведение журнала с помощью fileconfig и ведение журнала с помощью программной конфигурации.
Для демонстрации я создал два минимальных примера.
В первом примере я настраиваю логирование программно.Этот пример работает должным образом - сообщение журнала отладки выводится на консоль.
# foo.py
import logging
logger = logging.getLogger(__name__)
class Foo(object):
def __init__(self):
logger.debug('debug log from Foo')
##########################################################################
# loggingtest.py
import logging.config
from foo import Foo
if __name__ == '__main__':
consoleLogger = logging.StreamHandler()
formatter = logging.Formatter(
'%(asctime)-6s: %(name)s - %(levelname)s - %(message)s')
consoleLogger = logging.StreamHandler()
consoleLogger.setLevel(logging.DEBUG)
consoleLogger.setFormatter(formatter)
rootLogger = logging.getLogger()
rootLogger.addHandler(consoleLogger)
rootLogger.setLevel(logging.NOTSET)
# prints debug log message to console
foo = Foo()
Во втором примере я настраиваю ведение журнала с помощью fileConfig.Насколько я вижу, log-config-file должен иметь точно такое же поведение.Но, тем не менее, сообщение журнала отладки НЕ печатается в этом примере.
# foo.py (same as above)
import logging
logger = logging.getLogger(__name__)
class Foo(object):
def __init__(self):
logger.debug('debug log from Foo')
##########################################################################
# loggingtest.py
import logging.config
from foo import Foo
if __name__ == '__main__':
logging.config.fileConfig('logging.cfg')
# does NOT print debug log message to console. WHY???
foo = Foo()
##########################################################################
# logging.cfg
[loggers]
keys = root
[logger_root]
level = NOTSET
handlers = consoleHandler
[formatters]
keys = complex
[formatter_complex]
format = %(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s
[handlers]
keys = consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=complex
args=(sys.stdout,)
Так почему второй пример, использующий конфигурацию файла журнала, НЕ печатает мое сообщение журнала отладки на консоль?