如何设置与我自己的日志记录不同的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
,但这并没有改变任何东西。
下面的两行代码帮助我抑制了 es 库的过多日志记录。
es_logger = logging.getLogger('elasticsearch')
es_logger.setLevel(logging.WARNING)
在最近(v8.5)版本的elasticsearch中,喋喋不休的POST日志似乎已移至elastic_transport:
logging.getLogger('elastic_transport.transport').setLevel(logging.CRITICAL)
我一直在用这个:
from elasticsearch import logger as es_logger
LOGLEVEL = 50
es_logger.setLevel(LOGLEVEL)
作为补充答案,如果您的项目中有多个记录器,您可以这样做:
import elasticsearch
es_logger = elasticsearch.logger
es_logger.setLevel(elasticsearch.logging.WARNING)
优点:
缺点:
所有答案都不适合我。我深入研究了elasticsearch(8.11.1)并找到了记录的位置,并提取了记录器名称。这样做:
es_logger = logging.getLogger("elastic_transport.transport")
es_logger.setLevel(logging.WARNING)