Pycharm出现SQLALCHEMY_ECHO = True时重复记录日志。

3

当我在我的Flask应用程序中设置SQLALCHEMY_ECHO = True来记录SQLAlchemy查询时,会在控制台上出现重复日志。一次是红色的,另一次是白色的。如何只显示一种颜色?

enter image description here
1个回答

3
这很可能是因为SQLAlchemy在sqlalchemy.log.InstanceLogger.__init__中向他们的记录器添加了自己的处理程序。
    def __init__(self, echo: _EchoFlagType, name: str):
        self.echo = echo
        self.logger = logging.getLogger(name)

        # if echo flag is enabled and no handlers,
        # add a handler to the list
        if self._echo_map[echo] <= logging.INFO and not self.logger.handlers:
            _add_default_handler(self.logger)  # <=== Handler is added here

但是记录器仍然会将日志记录传播到更高级别的记录器和它们附加的处理程序。因此,如果您的根记录器附加了处理程序,则日志记录将从SQLAlchemy附加的处理程序和根记录器的处理程序中打印出来。
SQLAlchemy开发人员应该将他们的处理程序附加到根记录器上,只有在没有其他处理程序附加的情况下才这样做。类似于标准库logging.basicConfig()的行为。
这是我解决这个问题的方法:
from sqlalchemy import log as sqlalchemy_log
sqlalchemy_log._add_default_handler = lambda x: None  # Patch to avoid duplicate logging

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接