如何仅将SQLAlchemy记录器输出到文件

问题描述 投票:7回答:1

从我在SQLAlchemy日志配置文档中读到的内容中,我了解到sqlalchemy.create_engine上的echo参数控制sqlalchemy日志记录是否强制为stdout,但不应影响日志消息是否可用于日志处理程序。

在下面的代码中,如果echo=False和输出到stdout和db.log(如果echo=True),我没有输出到stdout OR db.log。当db.log仍然填充时,我不需要stdout。我怎么能做到这一点?

这是python 2.7.6和sqlalchemy 0.9.9

import sqlalchemy
import logging

active_db_url = 'postgres://user:pass@localhost/log_test'

db_log_file_name = 'db.log'
db_log_level = logging.INFO

db_handler = logging.FileHandler(db_log_file_name)
db_handler.setLevel(db_log_level)

db_logger = logging.getLogger('sqlalchemy')
db_logger.addHandler(db_handler)

engine = sqlalchemy.create_engine(active_db_url, echo=True)
engine.connect()

** EDIT已解决** db_logger也需要设置其logLevel。不只是db_handler。

import sqlalchemy
import logging

active_db_url = 'postgres://user:pass@localhost/log_test'

db_log_file_name = 'db.log'
db_handler_log_level = logging.INFO
db_logger_log_level = logging.DEBUG

db_handler = logging.FileHandler(db_log_file_name)
db_handler.setLevel(db_handler_log_level)

db_logger = logging.getLogger('sqlalchemy')
db_logger.addHandler(db_handler)
db_logger.setLevel(db_logger_log_level)

engine = sqlalchemy.create_engine(active_db_url, echo=False)
engine.connect()
python logging sqlalchemy
1个回答
0
投票

首先创建一个文件句柄来写日志。

handler = logging.FileHandler('app.log')
handler.setLevel(logging.DEBUG)

获取sqlalchemy记录器并添加此句柄。

logging.getLogger('sqlalchemy').addHandler(handler)
© www.soinside.com 2019 - 2024. All rights reserved.