【发布时间】:2014-10-16 08:35:40
【问题描述】:
我想记录使用elasticsearch-py 的python 脚本。特别是,我想要三个日志:
-
常规日志: 将
INFO及更高版本记录到stdout和文件中。 - ES 日志:仅将 ES 相关消息仅写入文件。
- ES 跟踪日志:仅将 ES 日志记录(例如 curl 查询及其输出)扩展到文件。
这是我目前所拥有的:
import logging
import logging.handlers
es_logger = logging.getLogger('elasticsearch')
es_logger.setLevel(logging.INFO)
es_logger_handler=logging.handlers.RotatingFileHandler('top-camps-base.log',
maxBytes=0.5*10**9,
backupCount=3)
es_logger.addHandler(es_logger_handler)
es_tracer = logging.getLogger('elasticsearch.trace')
es_tracer.setLevel(logging.DEBUG)
es_tracer_handler=logging.handlers.RotatingFileHandler('top-camps-full.log',
maxBytes=0.5*10**9,
backupCount=3)
es_tracer.addHandler(es_tracer_handler)
logger = logging.getLogger('mainLog')
logger.setLevel(logging.DEBUG)
# create file handler
fileHandler = logging.handlers.RotatingFileHandler('top-camps.log',
maxBytes=10**6,
backupCount=3)
fileHandler.setLevel(logging.INFO)
# create console handler
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
我的问题是es_logger 的INFO 消息也显示在终端上。事实上,日志消息被保存到正确的文件中!
如果我删除了与logger 相关的部分,那么 ES 日志记录工作正常,即只保存到相应的文件中。但是后来我没有其他部分....我在设置的最后一部分做错了什么?
编辑
可能的提示:在elasticsearch-py 的源代码中有一个名为logger 的记录器。会不会和我的有冲突?我尝试在上面的行中将logger 的名称更改为main_logger,但没有帮助。
可能的提示2:如果我将logger = logging.getLogger('mainLog')替换为logger = logging.getLogger(),那么es_logger控制台的输出格式会发生变化,并与sn-p中定义的格式相同。
【问题讨论】:
标签: python logging elasticsearch