Как использовать Python Logging для одного пакета - PullRequest
1 голос
/ 10 июня 2019

Я разрабатываю пакет и использую протоколирование для отладки / печати информации во время разработки.Есть ли хороший способ включить ведение журнала только для моего пакета, не включая его для всего, что ниже root?

Скажем, у меня есть my_package:

# Some package from elsewhere that I need but don't want to see logging from
import other_package  

import logging
from logging import NullHandler
logger = logging.getLogger(__name__)
logger.addHandler(NullHandler())

def my_func():
    logger.debug("a message")

и основная функция для использования пакета:

import my_package

# Some package from elsewhere that I need but don't want to see logging from
import another_package

import logging
logging.basicConfig(level=logging.DEBUG)

my_package.my_func()

Эта настройка позволит мне увидеть вызов my_func ()в logger.debug (), но он также покажет любые вызовы logger.debug () из other_package и another_package, которые я не хочу видеть.Как я могу установить вещи там, где я вижу только запись из my_package?

Я мог бы делать такие хакерские вещи, как жесткий код, отключающий logging.propagate друг друга или подобное, но такое впечатление, что должен быть лучший способ.

1 Ответ

1 голос
/ 10 июня 2019

Вы уже определили уникальный регистратор для вашего пакета. Вам просто нужно настроить это. Поскольку регистратор пакетов наследуется от корневого регистратора, все, что вы указываете с помощью basicConfig, также применимо к нему. Вам просто нужно выполнить переопределения, специфичные для логгера, после того, как вы позвоните basicConfig.

import logging
logging.basicConfig(level=logging.WARNING)
logging.getLogger('my.package').setLevel(logging.DEBUG)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...