Я перезаписываю connection.notices из psycopg2.
Моя цель - отправить уведомление от триггера PostgreSQL в мое приложение.
В python я хочу записать текущую трассировку стека в файл журнала, чтобы увидеть, какой код 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 текущего интерпретатора Python через триггер PostgreSQL )