【问题标题】:how to prevent werkzeug from logging如何防止 werkzeug 记录日志
【发布时间】:2013-06-13 10:23:41
【问题描述】:

我正在使用烧瓶和 werkzeug。为了监控从 sqlalchemy 发出的 sql 语句,我设置了一个 logging.basicConfig() 记录器并附加了 before_cursor_execute 事件来监控 SQL 语句。但是现在 werkzeug 还将日志记录附加到该记录器,这不是我想要的。 所以我的日志看起来像这样......(不需要 werkzeug 消息)

INFO:root:SELECT anon_1.heartbeat_id AS anon_1_heartbeat_id
FROM (SELECT heartbeat.id AS heartbeat_id FROM heartbeat ORDER BY stamp desc LIMIT ?
OFFSET ?) AS anon_1 ORDER BY heartbeat_name
INFO:werkzeug:127.0.0.1 - - [13/Jun/2013 12:10:52] "GET / HTTP/1.1" 200 -

在 werkzeug 文档中,我找不到任何关于日志记录的信息。这是我正在使用的代码。

logging.basicConfig(filename='sql.log', level=logging.INFO)
def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
    logging.info(statement)
event.listen(engine, "before_cursor_execute", before_cursor_execute)

【问题讨论】:

    标签: python logging flask werkzeug


    【解决方案1】:

    试试这样的东西(未经测试):

    import logging
    logger = logging.getLogger('sql')
    logger.addHandler(logging.StreamHandler('sql.log'))
    logger.setLevel(logging.INFO)
    
    def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
        logger.info(statement)
    event.listen(engine, "before_cursor_execute", before_cursor_execute)
    

    您所做的只是创建一个不同的记录器,这样它们就不会混淆,这应该可以解决您遇到的问题:)

    【讨论】:

    • 现在明白了,werkzeug 使用了全局日志,我应该远离那个
    【解决方案2】:

    Sqlalchemy 使用“sqlalchemy.engine”记录器。 要对其进行配置,您可以执行以下操作:

    lg = logging.getLogger('sqlalchemy.engine')
    lg.setLevel(logging.INFO)
    
    lh = logging.StreamHandler()
    lh.setFormatter(logging.Formatter('YOUR FORMAT HERE'))
    
    lg.add_handler(lh)
    

    之后就可以使用了

    logging.getLogger('sqlalchemy.engine')
    logging.info('your sql statement')
    

    【讨论】:

    • 这是有用的信息,我不知道如何利用 sqlalchemy 正在使用的日志记录。
    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多