python logging 输出多重日志
项目中遇到logging总是输出双重日志的问题,采用判断是否有handler并且删除handler,然后新建handler的方式,仍然存在该问题,最后发现,原来是root下还有一个handler,最后删除root下的handler,解决问题。
import logging
logger = logging.getLogger(str(uuid.uuid1()))
if logger.hasHandlers():
for i in logger.handlers:
logger.removeHandler(i)
sh = logging.StreamHandler()
sh.setFormatter(fmt)
logger.addHandler(sh)
最后更改为:
if logger.hasHandlers():
for i in logger.handlers:
logger.removeHandler(i)
if logger.root.hasHandlers():
for i in logger.root.handlers:
logger.root.removeHandler(i)
sh = logging.StreamHandler()
sh.setFormatter(fmt)
logger.addHandler(sh)
那么root下的handler怎么来的呢?
logger 在没有 handler 的情况下,其本身是不具备输出消息能力的,streamHandler 的第一个例子已经说明了这个问题。但是为什么 logger.warning(msg) 和 logger.error(msg) 能够在不配置 handler 的情况下,输出日志呢?这其实是 logging 模块的保护机制,对于 warning 和 error 级别的消息,如果消息的日志等级大于 logger 的日志等级,且 logger 没有配置任何的 handler,则会调用 logging 模块内置的 streamHandler 来输出信息。
posted on 2023-09-06 17:27 MissSimple 阅读(123) 评论(0) 编辑 收藏 举报