Вы заметили, что вызовы debug() и info() не сделали ничего, а два других вы-
вели на экран строку УРОВЕНЬ:root: перед каждым сообщением? Пока они выглядят
как выражение print(), имеющее несколько личностей.
Но это полезно. Вы можете выполнить поиск определенного значения уровня
в журнале, чтобы найти определенные сообщения, сравнить временные метки
и увидеть, что случилось перед тем, как упал ваш сервер, и т. д.
Усиленные раскопки в документации отвечают на первую загадку (на вторую
мы ответим уже через пару страниц): уровень приоритета по умолчанию — WARNING,
он будет записан в журнал, когда мы вызовем первую функцию (logging.debug()).
Мы можем указать уровень по умолчанию с помощью функции basicConfig().
Самый низкий уровень — DEBUG, это дает возможность поймать более высокие
уровни:
>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> logging.debug("It's raining again")
370
Глава 12. Быть питонщиком
DEBUG:root:It's raining again
>>> logging.info("With hail the size of hailstones")
INFO:root:With hail the size of hailstones
Мы сделали это с помощью стандартных функций журналирования, не создавая
специализированный объект. Каждый объект журналирования имеет имя. Созда-
дим объект, который называется bunyan:
>>> import logging
>>> logging.basicConfig(level='DEBUG')
>>> logger = logging.getLogger('bunyan')
>>> logger.debug('Timber!')
DEBUG:bunyan:Timber!
Если имя объекта журналирования содержит точки, они разделяют уровни
иерархии таких объектов, каждый из которых потенциально имеет разные при-
оритеты. Это означает, что объект с именем quark выше, чем объект с именем
quark.charmed. На вершине иерархии находится корневой объект журналирования
с именем ' '.
До этого момента мы только выводили сообщения, что практически не отлича-
ется от функции print().Чтобы направить сообщения в разные места назначения,
используем обработчики. Самым распространенным местом назначения является
файл журнала, направить туда сообщения можно так:
>>> import logging
>>> logging.basicConfig(level='DEBUG', filename='blue_ox.log')
>>> logger = logging.getLogger('bunyan')
>>> logger.debug("Where's my axe?")
>>> logger.warn("I need my axe")
>>>
Ага, строки больше не показываются на экране, вместо этого они попадают
в файл blue_ox.log:
DEBUG:bunyan:Where's my axe?
WARNING:bunyan:I need my axe
Вызов функции basicConfig() и передача имени файла в качестве аргумента
создали для вас объект типа FileHandler и сделали его доступным объекту журна-