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

问题描述 投票:0回答:5

如何设置与我自己的日志记录不同的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
5个回答
26
投票

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

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


6
投票

在最近(v8.5)版本的elasticsearch中,喋喋不休的POST日志似乎已移至elastic_transport:

logging.getLogger('elastic_transport.transport').setLevel(logging.CRITICAL)


4
投票

我一直在用这个:

from elasticsearch import logger as es_logger

LOGLEVEL = 50
es_logger.setLevel(LOGLEVEL)

2
投票

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

import elasticsearch

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

优点:

  • 您拥有完全控制权,并确保 Elastic Search 记录器不会与其他记录器发生冲突
  • 您可以设置警告/错误或调试级别,而无需记住数字的含义

缺点:

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

0
投票

所有答案都不适合我。我深入研究了elasticsearch(8.11.1)并找到了记录的位置,并提取了记录器名称。这样做:

es_logger = logging.getLogger("elastic_transport.transport")
es_logger.setLevel(logging.WARNING)
© www.soinside.com 2019 - 2024. All rights reserved.