默认情况下,Requests python库将日志消息写入控制台,如下所示:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
我通常对这些消息不感兴趣,并希望禁用它们。什么是沉默这些消息或减少请求的冗长的最好方法?
默认情况下,Requests python库将日志消息写入控制台,如下所示:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
我通常对这些消息不感兴趣,并希望禁用它们。什么是沉默这些消息或减少请求的冗长的最好方法?
当前回答
将记录器名称设置为请求或请求。Urllib3不适合我。我必须指定确切的记录器名称才能更改日志级别。
首先查看您已经定义了哪些记录器,以查看您想删除哪些记录器
print(logging.Logger.manager.loggerDict)
你会看到这样的东西:
{urllib3……”。poolmanager”:<日志记录。日志对象在0x1070a6e10>, 'django。要求:<日志记录。日志对象在0x106d61290>, 'django。模板”:<日志记录。日志对象在0x10630dcd0>, 'django。服务器:<日志记录。记录器对象0x106dd6a50>, 'urllib3。连接”:<日志记录。日志记录器对象0x10710a350>,'urllib3。connectionpool”:<日志记录。日志记录器对象0x106e09690>…}
然后为确切的记录器配置级别:
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'urllib3.connectionpool': {
'handlers': ['default'],
'level': 'WARNING',
'propagate' : False
},
其他回答
如果您在这里寻找修改任何(可能嵌套很深的)模块的日志记录的方法,请使用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,请注意此方法只显示在运行上述代码段时存在的记录器。例如,如果一个模块在实例化一个类时创建了一个新的记录器,那么必须在创建类之后放入这个代码片段,以便打印它的名称。
如果您有配置文件,可以对其进行配置。
在记录器部分添加urllib3:
[loggers]
keys = root, urllib3
添加logger_urllib3 section:
[logger_urllib3]
level = WARNING
handlers =
qualname = requests.packages.urllib3.connectionpool
Kbrose关于查找哪个记录器正在生成日志消息的指导非常有用。对于我的Django项目,我不得不从120个不同的日志记录器中进行分类,直到我发现elasticsearch Python库给我带来了问题。根据大多数问题的指导,我通过添加这个到我的日志记录器来禁用它:
...
'elasticsearch': {
'handlers': ['console'],
'level': logging.WARNING,
},
...
在这里发布,以防其他人在运行Elasticsearch查询时看到无用的日志消息。
将记录器名称设置为请求或请求。Urllib3不适合我。我必须指定确切的记录器名称才能更改日志级别。
首先查看您已经定义了哪些记录器,以查看您想删除哪些记录器
print(logging.Logger.manager.loggerDict)
你会看到这样的东西:
{urllib3……”。poolmanager”:<日志记录。日志对象在0x1070a6e10>, 'django。要求:<日志记录。日志对象在0x106d61290>, 'django。模板”:<日志记录。日志对象在0x10630dcd0>, 'django。服务器:<日志记录。记录器对象0x106dd6a50>, 'urllib3。连接”:<日志记录。日志记录器对象0x10710a350>,'urllib3。connectionpool”:<日志记录。日志记录器对象0x106e09690>…}
然后为确切的记录器配置级别:
'loggers': {
'': {
'handlers': ['default'],
'level': 'DEBUG',
'propagate': True
},
'urllib3.connectionpool': {
'handlers': ['default'],
'level': 'WARNING',
'propagate' : False
},
简单:只需在导入请求后添加requests.packages.urllib3.disable_warnings()