public inbox for [email protected]
help / color / mirror / Atom feedLog Stacktrace of current Python Interpreter via PostgreSQL trigger
4+ messages / 2 participants
[nested] [flat]
* Log Stacktrace of current Python Interpreter via PostgreSQL trigger
@ 2019-05-20 07:43 Thomas Güttler <[email protected]>
2019-05-20 10:19 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Daniele Varrazzo <[email protected]>
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Güttler @ 2019-05-20 07:43 UTC (permalink / raw)
To: psycopg
I am hunting a non reproducible in a production environment.
I can detect the buggy change in a postgres trigger.
Since it is production code I must no raise an exception. I can
only use logging.
If I could see the stacktrace of the python interpreter, I could
see which codes the change which I am hunting.
But how to get this interpreter stacktrace, if the condition is
detect in the db trigger?
https://stackoverflow.com/questions/51873708/log-stacktrace-of-python-in-postgresql-trigger
Maybe there is a psycopg2 feature which I don't know up to now.
I guess LISTEN+NOTIFY could get used.
Or setting a connection variable which I check after each SQL statement.
Ideas welcome,
Thomas Güttler
--
Thomas Guettler http://www.thomas-guettler.de/
I am looking for feedback: https://github.com/guettli/programming-guidelines
^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger
2019-05-20 07:43 Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
@ 2019-05-20 10:19 ` Daniele Varrazzo <[email protected]>
2019-05-20 12:43 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
0 siblings, 1 reply; 4+ messages in thread
From: Daniele Varrazzo @ 2019-05-20 10:19 UTC (permalink / raw)
To: Thomas Güttler <[email protected]>; +Cc: psycopg
If you use postgres logging in stored procedures you can retrieve the logs
in 'connection.notices'.
http://initd.org/psycopg/docs/connection.html#connection.notices
On Mon, 20 May 2019, 16:40 Thomas Güttler, <[email protected]>
wrote:
> I am hunting a non reproducible in a production environment.
>
> I can detect the buggy change in a postgres trigger.
>
> Since it is production code I must no raise an exception. I can
> only use logging.
>
> If I could see the stacktrace of the python interpreter, I could
> see which codes the change which I am hunting.
>
> But how to get this interpreter stacktrace, if the condition is
> detect in the db trigger?
>
>
>
> https://stackoverflow.com/questions/51873708/log-stacktrace-of-python-in-postgresql-trigger
>
> Maybe there is a psycopg2 feature which I don't know up to now.
>
> I guess LISTEN+NOTIFY could get used.
> Or setting a connection variable which I check after each SQL statement.
>
> Ideas welcome,
>
> Thomas Güttler
>
>
> --
> Thomas Guettler http://www.thomas-guettler.de/
> I am looking for feedback:
> https://github.com/guettli/programming-guidelines
>
>
>
^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger
2019-05-20 07:43 Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
2019-05-20 10:19 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Daniele Varrazzo <[email protected]>
@ 2019-05-20 12:43 ` Thomas Güttler <[email protected]>
2019-06-04 08:56 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Güttler @ 2019-05-20 12:43 UTC (permalink / raw)
To: Daniele Varrazzo <[email protected]>; +Cc: psycopg
Am 20.05.19 um 12:19 schrieb Daniele Varrazzo:
> If you use postgres logging in stored procedures you can retrieve the logs in 'connection.notices'.
>
> http://initd.org/psycopg/docs/connection.html#connection.notices
This sound great. Unfortunately I can't extract the whole stacktrace.
I only get the lines below psycopg, not the above (lines of the callers).
Here is my code:
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()
I see this in the logs:
'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() inside ConnectionNoticeList.append() extracts not the callers.
Is there a way to get the callers lines?
--
Thomas Guettler http://www.thomas-guettler.de/
I am looking for feedback: https://github.com/guettli/programming-guidelines
^ permalink raw reply [nested|flat] 4+ messages in thread
* Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger
2019-05-20 07:43 Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
2019-05-20 10:19 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Daniele Varrazzo <[email protected]>
2019-05-20 12:43 ` Re: Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
@ 2019-06-04 08:56 ` Thomas Güttler <[email protected]>
0 siblings, 0 replies; 4+ messages in thread
From: Thomas Güttler @ 2019-06-04 08:56 UTC (permalink / raw)
To: [email protected]
Am 20.05.19 um 14:43 schrieb Thomas Güttler:
> Am 20.05.19 um 12:19 schrieb Daniele Varrazzo:
>> If you use postgres logging in stored procedures you can retrieve the logs in 'connection.notices'.
>>
>> http://initd.org/psycopg/docs/connection.html#connection.notices
>
> This sound great. Unfortunately I can't extract the whole stacktrace.
> I only get the lines below psycopg, not the above (lines of the callers).
>
> Here is my code:
>
> 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()
>
>
> I see this in the logs:
>
> '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() inside ConnectionNoticeList.append() extracts not the callers.
>
> Is there a way to get the callers lines?
Above code works. I see the whole traceback.
I don't know why the traceback was cut in PyCharm. In production I could see the whole traceback and I could find the
broken code which modified the data in way which should not happen.
Many thanks to Daniele Varrazzo who provided the hint to overwrite connection.notices.
Regards,
Thomas Güttler
--
Thomas Guettler http://www.thomas-guettler.de/
I am looking for feedback: https://github.com/guettli/programming-guidelines
^ permalink raw reply [nested|flat] 4+ messages in thread
end of thread, other threads:[~2019-06-04 08:56 UTC | newest]
Thread overview: 4+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2019-05-20 07:43 Log Stacktrace of current Python Interpreter via PostgreSQL trigger Thomas Güttler <[email protected]>
2019-05-20 10:19 ` Daniele Varrazzo <[email protected]>
2019-05-20 12:43 ` Thomas Güttler <[email protected]>
2019-06-04 08:56 ` Thomas Güttler <[email protected]>
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox