Add capability to suppress CONTEXT: messages to elog machinery.
authorAndres Freund <andres@anarazel.de>
Thu, 25 Dec 2014 16:24:30 +0000 (17:24 +0100)
committerAndres Freund <andres@anarazel.de>
Thu, 25 Dec 2014 16:24:30 +0000 (17:24 +0100)
Hiding context messages usually is not a good idea - except for rather
verbose debugging/development utensils like LOG_DEBUG. There the
amount of repeated context messages just bloat the log without adding
information.

src/backend/utils/error/elog.c
src/include/utils/elog.h

index 231646481916c13a44889833044681f418c80110..8f04b19744da96a09aa1b16f8cb5bb8ecbbbd9c7 100644 (file)
@@ -1081,6 +1081,25 @@ errhidestmt(bool hide_stmt)
    return 0;                   /* return value does not matter */
 }
 
+/*
+ * errhidestmt --- optionally suppress CONTEXT: field of log entry
+ *
+ * This should only be used for verbose debugging messages where the repeated
+ * inclusion of CONTEXT: bloats the log volume too much.
+ */
+int
+errhidecontext(bool hide_ctx)
+{
+   ErrorData  *edata = &errordata[errordata_stack_depth];
+
+   /* we don't bother incrementing recursion_depth */
+   CHECK_STACK_DEPTH();
+
+   edata->hide_ctx = hide_ctx;
+
+   return 0;                   /* return value does not matter */
+}
+
 
 /*
  * errfunction --- add reporting function name to the current error
@@ -2724,7 +2743,8 @@ write_csvlog(ErrorData *edata)
    appendStringInfoChar(&buf, ',');
 
    /* errcontext */
-   appendCSVLiteral(&buf, edata->context);
+   if (!edata->hide_ctx)
+       appendCSVLiteral(&buf, edata->context);
    appendStringInfoChar(&buf, ',');
 
    /* user query --- only reported if not disabled by the caller */
@@ -2856,7 +2876,7 @@ send_message_to_server_log(ErrorData *edata)
            append_with_tabs(&buf, edata->internalquery);
            appendStringInfoChar(&buf, '\n');
        }
-       if (edata->context)
+       if (edata->context && !edata->hide_ctx)
        {
            log_line_prefix(&buf, edata);
            appendStringInfoString(&buf, _("CONTEXT:  "));
index 87438b86445480a8179b03ac770b0bfa839fc7e1..ec7ed220d672c7935c5e1602f0252d696d8ac153 100644 (file)
@@ -221,6 +221,7 @@ errcontext_msg(const char *fmt,...)
 __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
 
 extern int errhidestmt(bool hide_stmt);
+extern int errhidecontext(bool hide_ctx);
 
 extern int errfunction(const char *funcname);
 extern int errposition(int cursorpos);
@@ -385,6 +386,7 @@ typedef struct ErrorData
    bool        output_to_client;       /* will report to client? */
    bool        show_funcname;  /* true to force funcname inclusion */
    bool        hide_stmt;      /* true to prevent STATEMENT: inclusion */
+   bool        hide_ctx;       /* true to prevent CONTEXT: inclusion */
    const char *filename;       /* __FILE__ of ereport() call */
    int         lineno;         /* __LINE__ of ereport() call */
    const char *funcname;       /* __func__ of ereport() call */