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