Автостопом по Python | страница 70



Правилом хорошего тона считается создание объектов средств ведения журнала только для использования вместе с переменной __name__ global: модуль журналирования создает иерархию средств ведения журнала с помощью точечной нотации, поэтому использование конструкции __name__ гарантирует отсутствие пересечений.

Рассмотрим пример применения этого приема в исходном коде библиотеки Requests (https://github.com/kennethreitz/requests) — разместите это в файле верхнего уровня __init__.py вашего проекта:

># Установить дескриптор журналирования по умолчанию для того, чтобы

># избежать появления предупреждений, которые гласят «Обработчик не найден».

>import logging

>try: # Python 2.7+

>····from logging import NullHandler

>except ImportError:

>····class NullHandler(logging.Handler):

>········def emit(self, record):

>············pass

>logging.getLogger(__name__). addHandler(NullHandler())

Журналирование для приложения

Twelve-Factor App (http://12factor.net/) (авторитетный источник, где перечислены правила хорошего тона, применяемые при разработке приложений) содержит раздел, в котором рассказывается о подобных правилах журналирования (http://12factor.net/logs). В нем предложено рассматривать события журнала как поток событий, для отправки этого потока в стандартный поток вывода нужно использовать среду приложения.

Существует минимум три способа конфигурирования средств ведения журнала (табл. 4.4).


Таблица 4.4. Способы конфигурирования средств ведения журнала
СпособПлюсыМинусы
Использование файла в формате INIВы можете обновлять конфигурацию при запуске функции logging.config.listen(), которая будет слушать изменения в сокетеУ вас будет не такой полный контроль (например, пользовательские фильтры или средства ведения журнала, созданные как подклассы), чем это возможно при конфигурировании средств ведения журнала в коде
Использование словаря или файла в формате JSONВ дополнение к обновлению во время работы вы также можете загружать конфигурацию из файла с помощью модуля json, который находится в стандартной библиотеке, начиная с Python 2.6У вас будет не такой полный контроль, чем это возможно при конфигурировании средств ведения журнала в коде
Использование кодаВы имеете полный контроль над конфигурированиемЛюбые модификации потребуют внесения изменений в исходный код

Пример конфигурации с помощью файла в формате INI

Более подробная информация о формате INI содержится в разделе руководства журналирования, посвященном журналированию конфигурации (