On Friday, 2 December 2022, Ludwig Isaac Lim <ludz_lim@xxxxxxxxx> wrote:
I'm having problems wherein my print() statements inside my plpython stored proc are not appearing in postgresql log. I tried setting the file=sys.stderr
To reproduce:
CREATE OR REPLACE PROCEDURE p_ludwig_test()
AS
$$
import sys
try:
x = 1 / 0
except:
plpy.log("hello")
print("oink oink", file=sys.stderr)
print("oink oink - v2")
plpy.log("haha")
$$
LANGUAGE plpython3u;
call p_ludwig_test()
Output:
---------------------
2022-12-02 11:46:11.324 UTC [19390] LOG: hello
2022-12-02 11:46:11.324 UTC [19390] CONTEXT: PL/Python procedure "p_ludwig_test"
2022-12-02 11:46:11.324 UTC [19390] STATEMENT: call p_ludwig_test();
2022-12-02 11:46:11.324 UTC [19390] LOG: haha
2022-12-02 11:46:11.324 UTC [19390] CONTEXT: PL/Python procedure "p_ludwig_test"
2022-12-02 11:46:11.324 UTC [19390] STATEMENT: call p_ludwig_test();
Notice that the "oink oink" is not there.
Relevant logging configuration:
logging_collector = on
log_directory = 'logs'
log_min_messages = info
log_min_error_statement = error
PG version
-------------------
PostgreSQL 14.6 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-15), 64-bit
The reason why I'm trying to use print() is because plpy logger is quite verbose. Each logging will output 3 line
for example:
plpy.log("hello")
Will generate the following 3 lines in the log:
2022-12-02 11:46:11.324 UTC [19390] LOG: hello
2022-12-02 11:46:11.324 UTC [19390] CONTEXT: PL/Python procedure "p_ludwig_test"
2022-12-02 11:46:11.324 UTC [19390] STATEMENT: call p_ludwig_test();
Another thing is there is another stored procedure that I have wherein the print() to stderr actually works, so I'm not sure what I'm doing wrong.
Thank you in advance,
Ludwig