默认情况下,Requests python库将日志消息写入控制台,如下所示:

Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606

我通常对这些消息不感兴趣,并希望禁用它们。什么是沉默这些消息或减少请求的冗长的最好方法?


当前回答

Kbrose关于查找哪个记录器正在生成日志消息的指导非常有用。对于我的Django项目,我不得不从120个不同的日志记录器中进行分类,直到我发现elasticsearch Python库给我带来了问题。根据大多数问题的指导,我通过添加这个到我的日志记录器来禁用它:

      ...
      'elasticsearch': {
          'handlers': ['console'],
          'level': logging.WARNING,
      },     
      ...

在这里发布,以防其他人在运行Elasticsearch查询时看到无用的日志消息。

其他回答

对于任何使用logging.config.dictConfig的人来说,你可以像这样修改字典中的请求库日志级别:

'loggers': {
    '': {
        'handlers': ['file'],
        'level': level,
        'propagate': False
    },
    'requests.packages.urllib3': {
        'handlers': ['file'],
        'level': logging.WARNING
    }
}

简单:只需在导入请求后添加requests.packages.urllib3.disable_warnings()

我不确定之前的方法是否已经停止工作,但无论如何,这里有另一种消除警告的方法:

PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py

基本上,就是在脚本执行的上下文中添加一个环境变量。

来自文档:https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

在我的情况下,什么帮助了我(python 3.7)

import http.client as http_client
http_client.HTTPConnection.debuglevel = 0

答案在这里:Python:如何从第三方库中抑制日志记录语句?

您可以为basicConfig保留默认日志级别,然后在获取模块的日志记录器时设置DEBUG级别。

logging.basicConfig(format='%(asctime)s %(module)s %(filename)s:%(lineno)s - %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

logger.debug("my debug message")