Как распечатать журнал из модуля tweepy в stdout

#python #logging #tweepy #python-logging

Вопрос:

Я использую следующий код для печати всех журналов:

 rootLogger = logging.getLogger()
rootLogger.setLevel(logging.NOTSET)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.NOTSET)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
rootLogger.addHandler(handler)
 

Он отлично работает со всеми модулями urllib3, requests, oauthlib, matplotlib , которые используются в моих сценариях, за исключением того, что он ничего не печатает из tweepy модуля. Когда я печатаю все регистраторы, используя:

 loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
 

он выводит все регистраторы из других модулей и:

 <Logger tweepy.binder (WARNING)>, 
<Logger tweepy (WARNING)>
<Logger tweepy.auth (WARNING)>, 
<Logger tweepy.cache (WARNING)>, 
<Logger tweepy.streaming (WARNING)>
 

Я ожидаю, что, по крайней мере, получу журнал из этого в модуле tweepy, потому что я знаю, что я подключен:

 class Stream:

    ....
    ....

    def on_connect(self):
    """This is called after successfully connecting to the streaming API.
    """
    log.info("Stream connected")
 

Комментарии:

1. Какую версию Tweepy вы используете?

2. @Harmon758 3.10.0

Ответ №1:

Tweepy v3.10 имеет on_connect вход StreamListener , и по умолчанию он не регистрируется:
https://github.com/tweepy/tweepy/blob/v3.10.0/tweepy/streaming.py#L35-L42

Этот Stream.on_connect код взят из версии разработки в главной ветви.

При потоковой передаче с v3.10 Tweepy будет использовать ведение журнала только в том случае, если получено сообщение неизвестного типа.

Комментарии:

1. Я читал это: github.com/tweepy/tweepy Кажется, это другая версия, но я не уверен

2. Ветвь по умолчанию является главной ветвью, т. е. github.com/tweepy/tweepy/tree/master . github.com/tweepy/tweepy/tree/v3.10.0 является v3.10.