使用自定义处理程序冻结SQLAlchemy日志记录

2024-04-20 12:40:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写自己的Python日志处理程序,它将使用SQLAlchemy将日志记录写入数据库,而SQLAlchemy也将使用自己的日志机制(使用echo=True)写入终端。你知道吗

这是当前的简单+示例代码:

Base = declarative_base()
engine = create_engine('sqlite:///logdb.db', echo=True)
Session = sessionmaker(bind=engine)
class Log(Base):
    __tablename__ = 'Log'
    id = Column(Integer, primary_key=True)
    Log_message = Column(String)
    Timestamp = Column(String)

    def __init__(self, log_message=None, timestamp=None):
        self.Log_message = log_message
        self.Timestamp = timestamp

class DBHandler(logging.Handler):
    def __init__(self):
        logging.Handler.__init__(self)
        format = logging.Formatter('%(asctime)s - %(message)s')
        self.setFormatter(format)

    def emit(self, record):
        self.format(record)
        log = Log(
                log_message=record.__dict__['message'],
                timestamp=record.__dict__['asctime']
                )
        session = Session()
        session.add(log)
        session.commit()

def main():
    dbhandler = DBHandler()

    logging.getLogger().addHandler(dbhandler)
    logging.getLogger().setLevel(logging.DEBUG)
    logging.info('test_message')

但是,我进入终端的唯一日志消息是:

2018-12-16 23:58:11,994 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1

然后剧本就粘在了墙上会话.提交()行。你知道吗

有可能解决这个问题吗?你知道吗


Tags: selflogtrueformatmessagesqlalchemyinitsession