using __func__ to locate and distinguish some error messages

Started by jian heover 1 year ago3 messages
#1jian he
jian.universality@gmail.com

hi.

we have 450 appearance of
`cache lookup failed .*`

we have 141 appearance of
`could not open file .*`

so when it actually happens, it cannot quickly locate which function
where the error has happened.
maybe under certain conditions (e.g. certain build type or certain
log_min_messages),
we can also print out the function name by using gcc __func__.

or we can just do like:
if (!HeapTupleIsValid(tuple))
elog(ERROR, "cache lookup failed for relation %u %s",
RelationGetRelid(rel), __func__);

given that these errors are very unlikely to happen, if it happens,
printing out the function name seems not that inversive?

#2Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: jian he (#1)
Re: using __func__ to locate and distinguish some error messages

On 2024-Jun-07, jian he wrote:

so when it actually happens, it cannot quickly locate which function
where the error has happened.
maybe under certain conditions (e.g. certain build type or certain
log_min_messages),
we can also print out the function name by using gcc __func__.

That information is already in the error data, so you don't need it in
the message text. You can change your log_error_verbosity if you want
it to show up in the log; in psql you can use \errverbose to have it
shown to you after the error is thrown, or you can use
\pset VERBOSITY verbose
to have it printed for every error message. Tools other than psql would
need their own specific ways to display those.

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"Hay que recordar que la existencia en el cosmos, y particularmente la
elaboración de civilizaciones dentro de él no son, por desgracia,
nada idílicas" (Ijon Tichy)

#3jian he
jian.universality@gmail.com
In reply to: Alvaro Herrera (#2)
Re: using __func__ to locate and distinguish some error messages

On Fri, Jun 7, 2024 at 4:28 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:

On 2024-Jun-07, jian he wrote:

so when it actually happens, it cannot quickly locate which function
where the error has happened.
maybe under certain conditions (e.g. certain build type or certain
log_min_messages),
we can also print out the function name by using gcc __func__.

That information is already in the error data, so you don't need it in
the message text. You can change your log_error_verbosity if you want
it to show up in the log; in psql you can use \errverbose to have it
shown to you after the error is thrown, or you can use
\pset VERBOSITY verbose
to have it printed for every error message. Tools other than psql would
need their own specific ways to display those.

Thanks for pointing this out.