首页 > 解决方案 > 如何将日志从 tweepy 模块打印到标准输出

问题描述

我正在使用以下代码打印所有日志记录:

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")

标签: pythonloggingtweepypython-logging

解决方案


Tweepy v3.10 有on_connectStreamListener默认不记录:
https ://github.com/tweepy/tweepy/blob/v3.10.0/tweepy/streaming.py#L35-L42

Stream.on_connect代码来自主分支上的开发版本。

当使用 v3.10 进行流式传输时,Tweepy 将使用日志记录的唯一时间是接收到未知消息类型时。


推荐阅读