Python测试Elasticsearch连接时ping()返回False前出现Traceback错误
解决Elasticsearch Python客户端ping()失败时输出警告信息的问题
你遇到的这个问题其实是Elasticsearch Python客户端的默认行为:当ping()方法连接失败时,它会默认输出警告日志,这些日志看起来像是Traceback,但其实只是客户端在告诉你连接尝试失败了,而ping()本身还是会返回False。
下面给你几个简单的解决办法:
方法1:调用ping()时关闭失败警告
最直接的方式是在调用ping()的时候,传入warn_on_fail=False参数,这样客户端就不会输出连接失败的警告了:
from elasticsearch import Elasticsearch import requests es = Elasticsearch([{'host': 'localhost', 'port': 9200}]) # 关闭ping失败时的警告输出 is_connected = es.ping(warn_on_fail=False) print(is_connected) if is_connected: r = requests.get('http://localhost:9200') es.indices.delete(index='test_twitter', ignore=[400, 404]) connected = True print('Connected to ES..') else: print('Not connected to ES...')
方法2:全局禁用Elasticsearch的警告日志
如果你希望整个客户端都不输出这类警告,可以通过Python的logging模块调整Elasticsearch日志器的级别,把它设为ERROR,这样只有严重错误才会被输出,警告会被忽略:
import logging from elasticsearch import Elasticsearch import requests # 配置Elasticsearch日志只输出错误及以上级别 logging.getLogger('elasticsearch').setLevel(logging.ERROR) es = Elasticsearch([{'host': 'localhost', 'port': 9200}]) is_connected = es.ping() print(is_connected) if is_connected: r = requests.get('http://localhost:9200') es.indices.delete(index='test_twitter', ignore=[400, 404]) connected = True print('Connected to ES..') else: print('Not connected to ES...')
补充说明
那堆看起来像Traceback的内容其实不是真正的异常栈,而是客户端的警告日志。Elasticsearch Python客户端在ping()失败时,默认会用logging.warning()记录连接失败的详情,如果你没有配置日志级别,这些警告就会被打印到控制台。上面两种方法分别从单次调用和全局配置的角度解决了这个问题,你可以根据自己的需求选择。
内容的提问来源于stack exchange,提问作者Ahmad Hijazi
相关产品推荐
相关产品推荐

