Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 289

CRITICAL:root:Stop fencing and get inside!

Вы заметили, что вызовы 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 и сделали его доступным объекту журна-