diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 2316464819..8f04b19744 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -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: ")); diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 87438b8644..ec7ed220d6 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -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 */