默认情况下,Requests库将日志消息写入控制台,沿着Starting new HTTP connection (1): example.com
等行。我通常对这些消息不感兴趣,如何禁用它们?如何禁用请求库中的日志消息?
回答
我发现如何配置请求的日志级别,它通过标准的logging模块完成。我决定把它配置,除非他们至少警告,不记录消息:
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
如果你想申请的此设置urllib3库(通常使用的请求)也一样,添加以下内容:
logging.getLogger("urllib3").setLevel(logging.WARNING)
让我复制/粘贴前它我写了两个星期的文档部分,具有类似于你的问题后:
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')
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
这样,所有来自urllib3的level = INFO消息都不会出现在日志文件中。
因此,您可以继续为您的日志消息使用level = INFO ...只需对您正在使用的库进行修改即可。
我建议使用'setLevel(logging.WARNING)'记录可能的警告和错误消息。 – razz0
对于使用logging.config.dictConfig
你可以改变在字典这样的请求库日志级别任何人:
'loggers': {
'': {
'handlers': ['file'],
'level': level,
'propagate': False
},
'requests.packages.urllib3': {
'handlers': ['file'],
'level': logging.WARNING
}
}
这也适用于基于Django的项目。 –
添加requests.packages.urllib3.disable_warnings()
我不知道,如果以前的方法有停止工作,但在任何情况下,这里是删除警告的另一种方式:
PYTHONWARNINGS="ignore:Unverified HTTPS request" ./do-insecure-request.py
基本上,在脚本执行的上下文中添加一个环境变量。
从文档:https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
如果你来到这里寻找一种方式来修改任何(可能是深度嵌套)模块的日志记录,使用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)
谢谢,当使用'boto3'时,这帮助我使'urllib3'日志消息无声。这种情况下的记录器是'botocore.vendored.requests.packages.urllib3',所以我使用这个:'logging.getLogger(“botocore.vendored.requests.packages.urllib3”).setLevel(logging.WARNING)'和I终于摆脱了信息。 –
非常感谢!改变打印标准使我能够隔离python-elasticsearch是我的案例中的罪魁祸首。 –
请注意,当模块在他们的类内部创建记录器时,您将稍后调用这些记录器,例如调用BackgroundScheduler.BackgroundScheduler()时的'APScheduler'。 – user136036
如果您有配置文件,您可以对其进行配置。
添加urllib3在记录器部分:
[loggers]
keys = root, urllib3
添加logger_urllib3部分:
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
Kbrose的指导发现其中记录器生成的日志信息是非常有用。对于我的Django项目,我不得不对120个不同的记录器进行排序,直到我发现它是elasticsearch
Python库对我造成的问题。按照在大多数问题的指导下,我加入这个我记录器禁用它:
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
在这里发帖的情况下,其他人是看到无益的日志信息来通过时,他们运行一个Elasticsearch查询。
没有理由进口记录,只是这样做:
requests.packages.urllib3.disable_warnings()
- 1. 如何禁止nHibernate的日志消息
- 2. Restlet:如何取消服务器请求日志消息
- 3. 如何使用烧瓶中的请求信息来丰富日志消息?
- 4. 日志记录:如何过滤来自请求库的INFO消息?从请求库
- 5. 如何禁用Django源中的日志消息?
- 6. Python Cherrypy:禁用请求日志记录
- 7. 无法禁用日志消息
- 8. 无法禁用休眠日志消息
- 9. 如何在Node/Express.js中禁用HTTP请求日志
- 10. 如何在Eclipse中禁用Tomcat请求日志记录?
- 11. 如何在log4j框架中禁用net.lightbody.bmp(BrowserMobProxy)日志消息?
- 12. 如何在Wavemaker中禁用服务类日志[log4j]消息
- 13. 如何使用AWS Java SDK禁用请求级日志记录?
- 14. Django:禁用python请求库日志记录
- 15. 日志消息
- 16. 找到卷曲请求的消息在Apache日志
- 17. 打开SOAP消息的请求/响应日志
- 18. 如何禁止Node JS的控制台日志请求?
- 19. 如何禁用数据库日志?
- 20. Spring REST服务日志请求和响应消息
- 21. gulp任务运行请求显示日志消息太晚
- 22. python正则表达式不匹配请求日志消息
- 23. WCF REST消息日志记录,POST请求问题
- 24. 在Spring应用程序中禁用Hibernate日志消息
- 25. 如何在Biztalk 2010中构建WCF请求消息的消息
- 26. 空请求日志
- 27. Log4Net消息日志
- 28. Cronjob日志消息
- 29. 日志SOAP消息
- 30. 组日志消息
相关:nginx的和gunicorn(https://stackoverflow.com/q/48700404/562769) –