1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-11 10:01:57 +03:00

Add GUC option log_error_verbosity to control which fields of error

reports get put into the postmaster log.  Options are TERSE, DEFAULT,
VERBOSE, with the same behavior as implemented on the client side in
libpq.
This commit is contained in:
Tom Lane
2003-06-30 16:47:02 +00:00
parent a3cac5a3bf
commit 219e29784d
6 changed files with 148 additions and 71 deletions

View File

@ -37,7 +37,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.111 2003/05/28 18:19:09 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.112 2003/06/30 16:47:01 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -68,6 +68,7 @@
ErrorContextCallback *error_context_stack = NULL;
/* GUC parameters */
PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE;
bool Log_timestamp; /* show timestamps in stderr output */
bool Log_pid; /* show PIDs in stderr output */
@ -918,23 +919,52 @@ send_message_to_server_log(ErrorData *edata)
appendStringInfo(&buf, "%s: ", error_severity(edata->elevel));
if (Log_error_verbosity >= PGERROR_VERBOSE)
{
/* unpack MAKE_SQLSTATE code */
char tbuf[12];
int ssval;
int i;
ssval = edata->sqlerrcode;
for (i = 0; i < 5; i++)
{
tbuf[i] = PGUNSIXBIT(ssval);
ssval >>= 6;
}
tbuf[i] = '\0';
appendStringInfo(&buf, "%s: ", tbuf);
}
if (edata->message)
appendStringInfo(&buf, "%s\n", edata->message);
appendStringInfoString(&buf, edata->message);
else
appendStringInfoString(&buf, "missing error text\n");
appendStringInfoString(&buf, gettext("missing error text"));
/* XXX showing of additional info should perhaps be optional */
/* XXX ought to localize the label strings, probably */
if (edata->cursorpos > 0)
appendStringInfo(&buf, gettext(" at character %d"), edata->cursorpos);
if (edata->detail)
appendStringInfo(&buf, "DETAIL: %s\n", edata->detail);
if (edata->hint)
appendStringInfo(&buf, "HINT: %s\n", edata->hint);
if (edata->context)
appendStringInfo(&buf, "CONTEXT: %s\n", edata->context);
if (edata->funcname && edata->filename)
appendStringInfo(&buf, "IN: %s (%s:%d)\n",
edata->funcname, edata->filename, edata->lineno);
appendStringInfoChar(&buf, '\n');
if (Log_error_verbosity >= PGERROR_DEFAULT)
{
if (edata->detail)
appendStringInfo(&buf, gettext("DETAIL: %s\n"), edata->detail);
if (edata->hint)
appendStringInfo(&buf, gettext("HINT: %s\n"), edata->hint);
if (edata->context)
appendStringInfo(&buf, gettext("CONTEXT: %s\n"), edata->context);
if (Log_error_verbosity >= PGERROR_VERBOSE)
{
if (edata->funcname && edata->filename)
appendStringInfo(&buf, gettext("LOCATION: %s, %s:%d\n"),
edata->funcname, edata->filename,
edata->lineno);
else if (edata->filename)
appendStringInfo(&buf, gettext("LOCATION: %s:%d\n"),
edata->filename, edata->lineno);
}
}
/*
* If the user wants the query that generated this error logged, do so.
@ -942,7 +972,8 @@ send_message_to_server_log(ErrorData *edata)
* for queries triggered by extended query protocol; how to improve?
*/
if (edata->elevel >= log_min_error_statement && debug_query_string != NULL)
appendStringInfo(&buf, "STATEMENT: %s\n", debug_query_string);
appendStringInfo(&buf, gettext("STATEMENT: %s\n"),
debug_query_string);
#ifdef HAVE_SYSLOG
@ -992,11 +1023,10 @@ send_message_to_server_log(ErrorData *edata)
* Timestamp and PID are only used for stderr output --- we assume
* the syslog daemon will supply them for us in the other case.
*/
if (Log_timestamp)
fprintf(stderr, "%s", print_timestamp());
if (Log_pid)
fprintf(stderr, "%s", print_pid());
fprintf(stderr, "%s", buf.data);
fprintf(stderr, "%s%s%s",
Log_timestamp ? print_timestamp() : "",
Log_pid ? print_pid() : "",
buf.data);
}
pfree(buf.data);