python 如何设置elasticsearch库的日志记录级别,使其与我自己的日志记录不同?

pb3s4cty  于 2023-01-16  发布在  Python
关注(0)|答案(4)|浏览(260)

如何设置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,但这没有改变任何东西。

w8f9ii69

w8f9ii691#

下面的两行代码为我提供了抑制来自es库的过多日志记录的技巧。
es_logger = logging.getLogger('elasticsearch') es_logger.setLevel(logging.WARNING)

2sbarzqh

2sbarzqh2#

我一直在用这个:

from elasticsearch import logger as es_logger

LOGLEVEL = 50
es_logger.setLevel(LOGLEVEL)
pexxcrt2

pexxcrt23#

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

import elasticsearch

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

优点:

  • 您可以完全控制并确保ElasticSearch日志不会与其他日志发生冲突
  • 您可以设置WARNING/ERROR或DEBUG级别,而不必记住数字的含义

缺点:

  • 您依赖于ElasticSearch的内部记录器实现
goqiplq2

goqiplq24#

在elasticsearch的最新版本(v8.5)中,聊天POST日志似乎已经转移到了elastic_transport:
logging.getLogger('elastic_transport.transport').setLevel(logging.CRITICAL)

相关问题