Add GUC option log_error_verbosity to control which fields of error
authorTom Lane
Mon, 30 Jun 2003 16:47:02 +0000 (16:47 +0000)
committerTom Lane
Mon, 30 Jun 2003 16:47:02 +0000 (16:47 +0000)
reports get put into the postmaster log.  Options are TERSE, DEFAULT,
VERBOSE, with the same behavior as implemented on the client side in
libpq.

doc/src/sgml/runtime.sgml
src/backend/utils/error/elog.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/bin/psql/tab-complete.c
src/include/utils/elog.h

index 2cc2400a5c5c322859c19f6340f12c28ec9dc1bf..3f6a2b350db9df0735dd822ebf7e12b71fbd6688 100644 (file)
@@ -1,5 +1,5 @@
 
 
 
@@ -1513,7 +1513,7 @@ SET ENABLE_SEQSCAN TO OFF;
      When To Log
 
        
-        Here is a list of the various message types:
+        Here is a list of the various message severity levels:
         
          
           DEBUG[1-5]
@@ -1596,12 +1596,29 @@ SET ENABLE_SEQSCAN TO OFF;
 
      
 
+     
+      CLIENT_MIN_MESSAGES (string)
+      
+       
+        Controls which message levels are sent to the client.
+        Valid values are DEBUG5,
+        DEBUG4, DEBUG3, DEBUG2,
+        DEBUG1, LOG, NOTICE,
+        WARNING, and ERROR.  Each level
+        includes all the levels that follow it.  The later the level,
+        the fewer messages are sent.  The default is
+        NOTICE.  Note that LOG has a different
+        rank here than in LOG_MIN_MESSAGES.
+       
+      
+     
+
      
       LOG_MIN_MESSAGES (string)
       
        
-        This controls which message levels are written to the server
-        log.  Valid values are DEBUG5, DEBUG4,
+        Controls which message levels are written to the server log.
+   Valid values are DEBUG5, DEBUG4,
         DEBUG3, DEBUG2, DEBUG1,
         INFO, NOTICE, WARNING,
         ERROR, LOG, 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 NOTICE.  Note that
         LOG has a different rank here than in
-        CLIENT_MIN_MESSAGES.  Also see that section for an
-        explanation of the various values.
+        CLIENT_MIN_MESSAGES.
        
-
       
      
 
      
-      CLIENT_MIN_MESSAGES (string)
+      LOG_ERROR_VERBOSITY (string)
       
        
-        This controls which message levels are send to the client.
-        client.  Valid values are DEBUG5,
-        DEBUG4, DEBUG3, DEBUG2,
-        DEBUG1, LOG, NOTICE,
-        WARNING, and ERROR.  Each level
-        includes all the levels that follow it.  The later the level,
-        the fewer messages are sent.  The default is
-        NOTICE.  Note that LOG has a different
-        rank here than in LOG_MIN_MESSAGES.
+        Controls the amount of detail written in the server log for each
+   message that is logged.  Valid values are TERSE,
+   DEFAULT, and VERBOSE, each adding more
+   fields to displayed messages.
        
       
      
-     
 
      
       LOG_MIN_ERROR_STATEMENT (string)
@@ -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
         PANIC (effectively turning this feature
-        off). Valid values are DEBUG5,
+        off for normal use). Valid values are DEBUG5,
         DEBUG4DEBUG3,
         DEBUG2DEBUG1,
         INFONOTICE,
@@ -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.
        
-
-       
-        It is recommended you enable LOG_PID as well
-        so you can more easily match the error statement with the error
-        message.
-       
       
      
      
@@ -1668,12 +1671,12 @@ SET ENABLE_SEQSCAN TO OFF;
        
         
          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 0
-         (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 250 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.
         
@@ -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 postmaster's 
-        option). Unless some logging system such as
-        syslog is enabled, using this option is
+        option). Unless
+        syslog logging is enabled, using this option is
         discouraged since it makes it impossible to see error messages.
        
       
index 9d371a5a26d05c98f34e3bb59b2ab96c31eac02d..0660aaab9a9f82079e94e2a5d932e71f0c873c61 100644 (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);
index dfdc4f82e7fd67c6f76e6b4d7e089e8e2046fa07..6e0da5bbaabecf62bf975dfcea676d0b9bdc6d12 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut .
  *
  * 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)
 {
index 594c230a7693508bfd07eb0b6d0553e33b67f311..57c6e55cb22d35f1bf9ef09101c6ba933d2073a5 100644 (file)
 #
 #  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
index f0de8f6c0e674f29b040b6dd5005cef86fc48731..8f70c25e761dccc16874268686cadcb765b25337 100644 (file)
@@ -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",
index f10a15db65ba3ef8d7f415285ab112a8778d47bf..b92bc8393374048ef0c1a3ed294c4af3e97cd460 100644 (file)
@@ -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