提交 219e2978 编写于 作者: T Tom Lane

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.
上级 a3cac5a3
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.188 2003/06/27 18:20:50 momjian Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v 1.189 2003/06/30 16:47:01 tgl Exp $
-->
<Chapter Id="runtime">
......@@ -1513,7 +1513,7 @@ SET ENABLE_SEQSCAN TO OFF;
<title>When To Log</title>
<para>
Here is a list of the various message types:
Here is a list of the various message severity levels:
<variablelist>
<varlistentry>
<term><literal>DEBUG[1-5]</literal></term>
......@@ -1596,12 +1596,29 @@ SET ENABLE_SEQSCAN TO OFF;
<variablelist>
<varlistentry>
<term><varname>CLIENT_MIN_MESSAGES</varname> (<type>string</type>)</term>
<listitem>
<para>
Controls which message levels are sent to the client.
Valid values are <literal>DEBUG5</>,
<literal>DEBUG4</>, <literal>DEBUG3</>, <literal>DEBUG2</>,
<literal>DEBUG1</>, <literal>LOG</>, <literal>NOTICE</>,
<literal>WARNING</>, and <literal>ERROR</>. Each level
includes all the levels that follow it. The later the level,
the fewer messages are sent. The default is
<literal>NOTICE</>. Note that <literal>LOG</> has a different
rank here than in <literal>LOG_MIN_MESSAGES</>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>LOG_MIN_MESSAGES</varname> (<type>string</type>)</term>
<listitem>
<para>
This controls which message levels are written to the server
log. Valid values are <literal>DEBUG5</>, <literal>DEBUG4</>,
Controls which message levels are written to the server log.
Valid values are <literal>DEBUG5</>, <literal>DEBUG4</>,
<literal>DEBUG3</>, <literal>DEBUG2</>, <literal>DEBUG1</>,
<literal>INFO</>, <literal>NOTICE</>, <literal>WARNING</>,
<literal>ERROR</>, <literal>LOG</>, <literal>FATAL</>, and
......@@ -1609,30 +1626,22 @@ SET ENABLE_SEQSCAN TO OFF;
follow it. The later the level, the fewer messages are sent
to the log. The default is <literal>NOTICE</>. Note that
<literal>LOG</> has a different rank here than in
<literal>CLIENT_MIN_MESSAGES</>. Also see that section for an
explanation of the various values.
<literal>CLIENT_MIN_MESSAGES</>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>CLIENT_MIN_MESSAGES</varname> (<type>string</type>)</term>
<term><varname>LOG_ERROR_VERBOSITY</varname> (<type>string</type>)</term>
<listitem>
<para>
This controls which message levels are send to the client.
client. Valid values are <literal>DEBUG5</>,
<literal>DEBUG4</>, <literal>DEBUG3</>, <literal>DEBUG2</>,
<literal>DEBUG1</>, <literal>LOG</>, <literal>NOTICE</>,
<literal>WARNING</>, and <literal>ERROR</>. Each level
includes all the levels that follow it. The later the level,
the fewer messages are sent. The default is
<literal>NOTICE</>. Note that <literal>LOG</> has a different
rank here than in <literal>LOG_MIN_MESSAGES</>.
Controls the amount of detail written in the server log for each
message that is logged. Valid values are <literal>TERSE</>,
<literal>DEFAULT</>, and <literal>VERBOSE</>, each adding more
fields to displayed messages.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>LOG_MIN_ERROR_STATEMENT</varname> (<type>string</type>)</term>
......@@ -1643,7 +1652,7 @@ SET ENABLE_SEQSCAN TO OFF;
statements that cause an error of the specified level, or a
higher level, are logged. The default is
<literal>PANIC</literal> (effectively turning this feature
off). Valid values are <literal>DEBUG5</literal>,
off for normal use). Valid values are <literal>DEBUG5</literal>,
<literal>DEBUG4</literal>, <literal>DEBUG3</literal>,
<literal>DEBUG2</literal>, <literal>DEBUG1</literal>,
<literal>INFO</literal>, <literal>NOTICE</literal>,
......@@ -1654,12 +1663,6 @@ SET ENABLE_SEQSCAN TO OFF;
logged. Enabling this option can be helpful in tracking down
the source of any errors that appear in the server log.
</para>
<para>
It is recommended you enable <varname>LOG_PID</varname> as well
so you can more easily match the error statement with the error
message.
</para>
</listitem>
</varlistentry>
......@@ -1668,12 +1671,12 @@ SET ENABLE_SEQSCAN TO OFF;
<listitem>
<para>
Sets a minimum statement execution time (in milliseconds)
above which a statement will be logged.  All SQL statements
above which a statement will be logged. All SQL statements
that run longer than the time specified will be logged together
with the duration, in seconds.  The default is <literal>0</literal>
(turning this feature off).  For example, if you set it
with their actual duration. Setting this to zero (the default)
disables time-based logging. For example, if you set it
to <literal>250</literal> then all SQL statements that run longer
than 250ms will be logged along with the duration.  Enabling this
than 250ms will be logged. Enabling this
option can be useful in tracking down unoptimized queries in
your applications.
</para>
......@@ -1688,8 +1691,8 @@ SET ENABLE_SEQSCAN TO OFF;
will automatically run in background and any controlling terminals
are disassociated. Thus, no messages are written to standard
output or standard error (same effect as <command>postmaster</>'s <option>-S</option>
option). Unless some logging system such as
<application>syslog</> is enabled, using this option is
option). Unless
<application>syslog</> logging is enabled, using this option is
discouraged since it makes it impossible to see error messages.
</para>
</listitem>
......
......@@ -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);
......
......@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.132 2003/06/27 19:08:38 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.133 2003/06/30 16:47:01 tgl Exp $
*
*--------------------------------------------------------------------
*/
......@@ -94,6 +94,8 @@ static const char *assign_min_error_statement(const char *newval, bool doit,
bool interactive);
static const char *assign_msglvl(int *var, const char *newval,
bool doit, bool interactive);
static const char *assign_log_error_verbosity(const char *newval, bool doit,
bool interactive);
static bool assign_phony_autocommit(bool newval, bool doit, bool interactive);
......@@ -134,9 +136,10 @@ int client_min_messages = NOTICE;
* cases provide the value for SHOW to display. The real state is elsewhere
* and is kept in sync by assign_hooks.
*/
static char *log_min_error_statement_str;
static char *log_min_messages_str;
static char *client_min_messages_str;
static char *log_min_messages_str;
static char *log_error_verbosity_str;
static char *log_min_error_statement_str;
static bool phony_autocommit;
static bool session_auth_is_superuser;
static double phony_random_seed;
......@@ -820,6 +823,16 @@ static struct config_string
"notice", assign_client_min_messages, NULL
},
{
{"log_min_messages", PGC_SUSET}, &log_min_messages_str,
"notice", assign_log_min_messages, NULL
},
{
{"log_error_verbosity", PGC_SUSET}, &log_error_verbosity_str,
"default", assign_log_error_verbosity, NULL
},
{
{"log_min_error_statement", PGC_SUSET}, &log_min_error_statement_str,
"panic", assign_min_error_statement, NULL
......@@ -909,11 +922,6 @@ static struct config_string
PG_VERSION, NULL, NULL
},
{
{"log_min_messages", PGC_SUSET}, &log_min_messages_str,
"notice", assign_log_min_messages, NULL
},
/* Not for general use --- used by SET SESSION AUTHORIZATION */
{
{"session_authorization", PGC_USERSET, GUC_NO_SHOW_ALL | GUC_NO_RESET_ALL},
......@@ -3468,6 +3476,29 @@ assign_msglvl(int *var, const char *newval, bool doit, bool interactive)
return newval; /* OK */
}
static const char *
assign_log_error_verbosity(const char *newval, bool doit, bool interactive)
{
if (strcasecmp(newval, "terse") == 0)
{
if (doit)
Log_error_verbosity = PGERROR_TERSE;
}
else if (strcasecmp(newval, "default") == 0)
{
if (doit)
Log_error_verbosity = PGERROR_DEFAULT;
}
else if (strcasecmp(newval, "verbose") == 0)
{
if (doit)
Log_error_verbosity = PGERROR_VERBOSE;
}
else
return NULL; /* fail */
return newval; /* OK */
}
static bool
assign_phony_autocommit(bool newval, bool doit, bool interactive)
{
......
......@@ -119,13 +119,16 @@
#
# Message display
#
#client_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# log, info, notice, warning, error
#log_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# info, notice, warning, error, log, fatal,
# panic
#client_min_messages = notice # Values, in order of decreasing detail:
# debug5, debug4, debug3, debug2, debug1,
# log, info, notice, warning, error
#log_error_verbosity = default # terse, default, or verbose messages
#silent_mode = false
#log_connections = false
......
......@@ -3,7 +3,7 @@
*
* Copyright 2000-2002 by PostgreSQL Global Development Group
*
* $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.80 2003/06/12 01:38:08 momjian Exp $
* $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.81 2003/06/30 16:47:01 tgl Exp $
*/
/*----------------------------------------------------------------------
......@@ -543,6 +543,7 @@ psql_completion(char *text, int start, int end)
"lc_numeric",
"lc_time",
"log_duration",
"log_error_verbosity",
"log_executor_stats",
"log_min_duration_statement",
"log_min_error_statement",
......
......@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: elog.h,v 1.44 2003/05/27 17:49:46 momjian Exp $
* $Id: elog.h,v 1.45 2003/06/30 16:47:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -268,6 +268,15 @@ extern DLLIMPORT ErrorContextCallback *error_context_stack;
/* GUC-configurable parameters */
typedef enum
{
PGERROR_TERSE, /* single-line error messages */
PGERROR_DEFAULT, /* recommended style */
PGERROR_VERBOSE /* all the facts, ma'am */
} PGErrorVerbosity;
extern PGErrorVerbosity Log_error_verbosity;
extern bool Log_timestamp;
extern bool Log_pid;
#ifdef HAVE_SYSLOG
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册