【问题标题】:How to set the logging level for the elasticsearch library differently to my own logging?如何将弹性搜索库的日志记录级别设置为与我自己的日志记录不同?
【发布时间】:2016-12-15 00:00:10
【问题描述】:

如何将 elasticsearch 库的日志记录级别设置为与我自己的日志记录不同?为了说明这个问题,我描述了模块场景。我有一个模块lookup.py,它使用elasticsearch,如下所示:

import logging
logger = logging.getLogger(__name__)
import elasticsearch

def get_docs():
    logger.debug("search elastic")
    es = elasticsearch.Elasticsearch('http://my-es-server:9200/')
    res = es.search(index='myindex', body='myquery')
    logger.debug("elastic returns %s hits" % res['hits']['total'])
    .
    .
.

然后在我的主文件中做

import logging
import lookup.py

logging.root.setLevel(loglevel(args))
get_docs()
.
.
.

我从 Elasticsearch 对象内部收到很多调试消息。如何在不抑制 lookup.py 本身的调试消息的情况下使用 lookup.py 中的一些代码抑制它们? Elasticsearch 类似乎有一个 logger 对象;我尝试将其设置为None,但这并没有改变任何东西。

【问题讨论】:

    标签: python logging module


    【解决方案1】:

    以下两行代码帮助我抑制了 es 库中的过多日志记录。

    es_logger = logging.getLogger('elasticsearch') es_logger.setLevel(logging.WARNING)

    【讨论】:

      【解决方案2】:

      我一直在用这个:

      from elasticsearch import logger as es_logger
      
      LOGLEVEL = 50
      es_logger.setLevel(LOGLEVEL)
      

      【讨论】:

        【解决方案3】:

        作为补充答案,如果您的项目中有多个记录器,您可以这样做:

        import elasticsearch
        
        es_logger = elasticsearch.logger
        es_logger.setLevel(elasticsearch.logging.WARNING)
        

        优点:

        • 您拥有完全控制权并确保弹性搜索记录器不会与其他记录器发生冲突
        • 您可以设置 WARNING/ERROR 或 DEBUG 级别,而无需记住数字的含义

        缺点:

        • 您依赖于弹性搜索的内部记录器实现

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-23
          • 2016-11-27
          • 1970-01-01
          • 2013-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-06
          相关资源
          最近更新 更多