Stacktrace of Python вырезан в соединении psycopg2. - PullRequest
0 голосов
/ 22 мая 2019

Я перезаписываю 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 )

1 Ответ

0 голосов
/ 04 июня 2019

Над кодом работает.Я вижу весь трассировку.

Я не знаю, почему трассировка была отключена в PyCharm.В процессе работы я мог видеть весь трассировку и найти неработающий код, который изменял данные так, как это не должно происходить.

Большое спасибо Даниэле Варраццо, который дал подсказку перезаписать connection.notices:

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

...