如何从请求库禁用日志消息?如何从请求库禁用日志消息?(How do I disable log me

2019-06-01 02:33发布

默认情况下, 请求 Python库写入日志消息到控制台,沿着线:

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

我通常不感兴趣的这些消息,并希望将其禁用。 什么是沉默那些邮件,或者降低要求冗长的最佳方式?

Answer 1:

我发现了如何配置请求的日志记录级别,它通过标准做记录模块。 我决定把它配置,除非他们至少警告,无法登录的消息:

import logging

logging.getLogger("requests").setLevel(logging.WARNING)

如果你想太将此设定为urllib3库(通常使用的请求),添加以下内容:

logging.getLogger("urllib3").setLevel(logging.WARNING)


Answer 2:

如果你来到这里寻找一种方式来修改任何(可能是深度嵌套)模块的日志记录,使用logging.Logger.manager.loggerDict让所有的记录对象的字典。 然后,返回的名称可以作为参数传递给logging.getLogger

import requests
import logging
for key in logging.Logger.manager.loggerDict:
    print(key)
# requests.packages.urllib3.connectionpool
# requests.packages.urllib3.util
# requests.packages
# requests.packages.urllib3
# requests.packages.urllib3.util.retry
# PYREADLINE
# requests
# requests.packages.urllib3.poolmanager

logging.getLogger('requests').setLevel(logging.CRITICAL)
# Could also use the dictionary directly:
# logging.Logger.manager.loggerDict['requests'].setLevel(logging.CRITICAL)

每一个评论user136036,要知道,这种方法只能说明你存在在你运行上面的代码片段的时间记录器。 如果,例如,一个模块,当你实例化一个类创建一个新的记录,那么你必须为了打印它的名字创建类之后把这个片段。



Answer 3:

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

以这种方式水平的所有消息从= INFO urllib3将不存在在日志文件中。

所以,你可以继续使用水平= INFO的日志消息...只是修改此为您所使用的库。



Answer 4:

让我复制/粘贴前它我写了两个星期,有类似你这样的问题后,相关文档部分:

import requests
import logging

# these two lines enable debugging at httplib level (requests->urllib3->httplib)
# you will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# the only thing missing will be the response.body which is not logged.
import httplib
httplib.HTTPConnection.debuglevel = 1

logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

requests.get('http://httpbin.org/headers')


Answer 5:

对于使用任何logging.config.dictConfig你可以改变在字典这样的请求库日志级别:

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


Answer 6:

如果您有配置文件,您可以配置它。

添加urllib3在记录器部分:

[loggers]
keys = root, urllib3

添加logger_urllib3部分:

[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool


Answer 7:

设置记录器名称为requestsrequests.urllib3没有为我工作。 我必须指定确切的记录器名称更改日志记录级别。

首先看看哪些原木你定义了,就看你要删除哪些

print(logging.Logger.manager.loggerDict)

你会看到这样的事情:

{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}

然后,配置的确切记录的水平:

   'loggers': {
    '': {
        'handlers': ['default'],
        'level': 'DEBUG',
        'propagate': True
    },
    'urllib3.connectionpool': {
        'handlers': ['default'],
        'level': 'WARNING',
        'propagate' : False
    },


Answer 8:

简单:只需添加requests.packages.urllib3.disable_warnings()import requests



Answer 9:

Kbrose对发现该记录器生成的日志信息的指导是非常有用。 对于我的Django项目,我有120个不同的记录器通过排序,直到我发现,这是elasticsearch这是造成我的问题Python库。 按照在大多数问题的指导下,我加入这个我记录器禁用它:

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

万一别人张贴在这里看到的是无益的日志信息来通过时,他们运行一个Elasticsearch查询。



Answer 10:

我不知道,如果以前的方法已经停止工作,但在任何情况下,这里的移除警告另一种方式:

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

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

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



文章来源: How do I disable log messages from the Requests library?