首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python的堆栈跟踪在psycopg2 connection.notices中被剪切

Python的堆栈跟踪在psycopg2 connection.notices中被剪切
EN

Stack Overflow用户
提问于 2019-05-22 16:38:08
回答 1查看 67关注 0票数 0

我正在覆盖psycopg2的connection.notices

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

在python中,我想将当前的堆栈跟踪写到一个日志文件中,以查看哪个python代码正在触发数据库中的触发器。

它可以工作,但不幸的是我不能提取整个堆栈跟踪。

我只得到了下面的行,而不是上面的行(调用者的行)。

下面是我的代码:

代码语言:javascript
复制
# 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()

我在日志中看到这一点:

代码语言:javascript
复制
'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())))
  '

ConnectionNoticeList.append()中的traceback.format_stack()提取的不是调用者。

有没有办法获得上面方法的代码行?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-04 16:54:28

上面的代码可以工作。我看到了整个回溯过程。

我不知道为什么在PyCharm中删除了回溯。在生产环境中,我可以看到整个回溯过程,还可以找到以不应该发生的方式修改数据的错误代码。

非常感谢Daniele Varrazzo,他提供了改写connection.notices的提示:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56252632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档