我正在覆盖psycopg2的connection.notices。
我的目标是从PostgreSQL触发器向我的应用程序发送通知。
在python中,我想将当前的堆栈跟踪写到一个日志文件中,以查看哪个python代码正在触发数据库中的触发器。
它可以工作,但不幸的是我不能提取整个堆栈跟踪。
我只得到了下面的行,而不是上面的行(调用者的行)。
下面是我的代码:
# 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())))
'ConnectionNoticeList.append()中的traceback.format_stack()提取的不是调用者。
有没有办法获得上面方法的代码行?
(这与一个更老的问题有关:Log Stacktrace of current Python Interpreter via PostgreSQL trigger)
发布于 2019-06-04 16:54:28
上面的代码可以工作。我看到了整个回溯过程。
我不知道为什么在PyCharm中删除了回溯。在生产环境中,我可以看到整个回溯过程,还可以找到以不应该发生的方式修改数据的错误代码。
非常感谢Daniele Varrazzo,他提供了改写connection.notices的提示:
https://stackoverflow.com/questions/56252632
复制相似问题