在psycopg2连接中减少了Python的Stacktrace。注意事项

时间:2019-05-22 08:38:08

标签: python django postgresql psycopg2

我正在覆盖psycopg2的connection.notices

我的目标是将PostgreSQL触发器的通知发送到我的应用程序。

在python中,我想将当前stacktrace写入日志文件,以查看哪个python代码正在触发数据库中的触发器。

它可以工作,但是很遗憾,我无法提取整个堆栈跟踪。

我只得到psycopg下面的行,而不是上面的(呼叫者的行)。

这是我的代码:

# Overwriting connetion.notices via Django
class MyAppConfig(AppConfig):

    def ready(self):
        connection_created.connect(connection_created_check_for_notice_in_connection)

class ConnectionNoticeList(object):
    def append(self, message):
        if not 'some_magic_of_db_trigger' in message:
            return
        logger.warn('%s %s' % (message, ''.join(traceback.format_stack())))

def connection_created_check_for_notice_in_connection(sender, connection, **kwargs):
    connection.connection.notices=ConnectionNoticeList()

我在日志中看到了这个

'NOTICE:  some_magic_of_db_trigger: 17909
     File "/snap/pycharm-community/128/helpers/pycharm/_jb_pytest_runner....ork/foo/apps.py", line 47, in append
      logger.warn(\'%s %s\' % (message, \'\'.join(traceback.format_stack())))
  '
traceback.format_stack()中的

ConnectionNoticeList.append()不会提取呼叫者。

有没有办法获取上层方法的内容?

(这与一个较早的问题有关:Log Stacktrace of current Python Interpreter via PostgreSQL trigger

1 个答案:

答案 0 :(得分:0)

以上代码有效。我看到了整个回溯。

我不知道为什么在PyCharm中削减了追溯。在生产中,我可以看到整个回溯,并且可以找到损坏的代码,这些代码以不应该发生的方式修改了数据。

非常感谢Daniele Varrazzo提供了覆盖连接的提示。注意:

https://www.postgresql.org/message-id/CA%2Bmi_8a5rij_5xchPkYPFS3moAtw9i6TrwKndynWfbJ%3DkFA4fg%40mail.gmail.com