Python3中psycopg2 LoggingConnection无法写入日志文件的问题
解决psycopg2.LoggingConnection日志为空的问题
问题场景
我用Python3写了一个操作PostgreSQL的dbops类,负责数据库的查询、更新、插入等操作。为了捕获实际发送到数据库的SQL语句,我用psycopg2.extras.LoggingConnection配置了事务日志,但生成的postgresdbops.log日志文件一直是空的——哪怕我通过psql客户端确认数据库操作已经成功执行了。
问题根源
排查后发现问题出在日志实例的初始化代码上:
最初的代码是这样的:
logger = logging.getLogger(__name__)
这里通过__name__获取的日志器,和我预先配置好的、负责输出到postgresdbops.log的dbpopLogger不是同一个实例。LoggingConnection默认会使用这个日志器输出SQL日志,但因为日志器实例不匹配,日志消息根本没被导向到正确的文件处理器,所以日志文件始终为空。
解决方法
把日志器初始化代码改成指定已配置好的日志器名称:
logger = logging.getLogger('dbpopLogger')
替换之后,LoggingConnection输出的SQL日志就能正常写入到postgresdbops.log文件里了。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

