python-elasticsearch:如何启用curl日志记录?

时间:2018-10-12 16:07:04

标签: python elasticsearch logging instrumentation elasticsearch-py

我正在使用python-elasticsearch模块,我读过python-elasticsearch documentation that you can log all the underlying HTTP requests as command line curl commands

  

elasticsearch.trace可用于将请求记录到服务器中的   使用漂亮打印的json的curl命令的形式   从命令行执行。因为它是为共享而设计的(对于   演示问题的示例)它也只使用localhost:9200作为   地址,而不是主机的实际地址。如果有痕迹   记录器尚未配置,已设置为property = False,因此   需要单独激活。

对于python-elasticsearch模块,如何启用此curl日志记录?

我尝试过:

  • 将全局记录器设置为logging.basicConfig(level=logging.DEBUG),但没有输出卷曲
  • 我尝试获取elasticsearch.trace记录器并将该记录器的级别设置为logging.DEBUG,然后设置es_trace_logger.propagate = True,但两者均无效

1 个答案:

答案 0 :(得分:1)

我认为您可能缺少的关键一步是向elasticsearch.trace记录器添加处理程序。

import logging
es_trace_logger = logging.getLogger('elasticsearch.trace')
es_trace_logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
es_trace_logger.addHandler(handler)

因此,我在这里向记录器添加了StreamHandler,因此所有日志都将进入stdout。您可以根据用例(例如FileHandler)的需要添加其他处理程序。

这是相同的示例调试日志-

curl -XGET 'http://localhost:9200/my_index/_search?pretty' -d '{
  "size": 100
}'
#[200] (1.311s)
#{
#  "_shards": {
#    "failed": 0,
#    "successful": 6,
#    "total": 6
#  },
#  "hits": {
#    "hits": [
#      {
#        "_id": "FLKSD0SDFJJSDF7D518319DE5EEBB5d5b07044",

拥有此记录器将记录整个请求和我们执行的每个请求的响应,因此有时这些日志可能会让人不知所措,但对于调试来说非常有用。

对于相同的请求,相应的elasticsearch记录器将输出类似以下内容-

GET http://my_es_host:9200/my_index/_search [status:200 request:1.528s]
> {"size": 100}
< {"took":21,"timed_out":false,"_shards":{"total":6,"successful":6,"failed":0},"hits":{"total":112,"max_score":1.0,"hits":[{"_index":"my_index","_