首页 > 解决方案 > Python日志记录没有发生

问题描述

我有一个用于从数据库表中删除记录的 python 脚本。有些表的容量很大,比如 5 亿条记录。每个删除语句之后都有日志语句。但是日志语句没有被打印,但删除语句正在执行,因为我可以看到数据库中的数据被清除。

下面是代码片段:

 del_query = "delete from {source_schema}.RAW_TAB where raw_tab_id in " \
            "(select RAW_TAB_ID from {source_schema}.RAW_TAB_1 where T1_ID in ({t1_list})) " \
            .format(source_schema=source_schema, t1_list=t1_list)
logger.info("Deletion iteration started from source")
logger.debug("Executing query :\n {} for ".format(del_query))
cursor.execute(del_query)

del_query = "delete from {source_schema}.RAW_TAB_1 where T1_ID in  ({t1_list}) " \
    .format(source_schema=source_schema, t1_list=t1_list)
logger.debug("Executing query :\n {}".format(del_query))
cursor.execute(del_query)

在上面的语句中,t1_list是逗号分隔的值,比如t1,t2,t3等。我传入大小为 50 的集合。因此,应该从这些大容量表中删除几条记录。这里给出的示例代码是方法的一部分,该方法被调用了数千次,直到所有记录都被删除。

因此,想了解为什么不打印日志语句但随后的删除语句正在正确执行。当我运行脚本时,我不确定是否正在发生清除,直到我在数据库中查询。当我使用相同的脚本来清除体积较小的表时,清除会正确发生。所以,问题是表的体积很大。python的字符串格式方法是否有任何限制,它只能接受一定长度的字符串?或者日志记录实现是否有任何问题。

日志声明如下:

import logging
logger = logging.getLogger('sspurge.' + __name__)

3.8 中使用的 Python 版本

标签: python

解决方案


查看官方文档以获取有关日志记录的更多信息。

您没有看到任何日志消息,因为您忘记将 Logger 实例的日志记录级别更改为DEBUG. 默认级别是WARNING,因此只会打印WARNING消息和更严重的消息 (ERROR和)。CRITICAL

如果你还想打印DEBUGINFO消息,则需要在创建 Logger 实例后添加以下行:

import logging

logger = logging.getLogger('sspurge.' + __name__)
logger.setLevel(logging.DEBUG)

推荐阅读