diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-03-02 23:37:23 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-03-02 23:37:23 +0000 |
commit | 61c3e5b2486825ee65da322e1408286a8c0d5de6 (patch) | |
tree | fa11fd0d50762edf630370c04bbcd5b79c8129be /src/backend/utils/error/elog.c | |
parent | 1a7f6302bc044ac2e9027be1f94118e029c64ed9 (diff) | |
download | postgresql-61c3e5b2486825ee65da322e1408286a8c0d5de6.tar.gz postgresql-61c3e5b2486825ee65da322e1408286a8c0d5de6.zip |
Make log_min_error_statement put LOG level at the same priority as
log_min_messages does; and arrange to suppress the duplicative output
that would otherwise result from log_statement and log_duration messages.
Bruce Momjian and Tom Lane.
Diffstat (limited to 'src/backend/utils/error/elog.c')
-rw-r--r-- | src/backend/utils/error/elog.c | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 3700c4ecdc0..c76d817bb14 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -42,7 +42,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.182 2007/02/11 11:59:26 mha Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.183 2007/03/02 23:37:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -732,6 +732,25 @@ errcontext(const char *fmt,...) /* + * errhidestmt --- optionally suppress STATEMENT: field of log entry + * + * This should be called if the message text already includes the statement. + */ +int +errhidestmt(bool hide_stmt) +{ + ErrorData *edata = &errordata[errordata_stack_depth]; + + /* we don't bother incrementing recursion_depth */ + CHECK_STACK_DEPTH(); + + edata->hide_stmt = hide_stmt; + + return 0; /* return value does not matter */ +} + + +/* * errfunction --- add reporting function name to the current error * * This is used when backwards compatibility demands that the function @@ -1629,7 +1648,9 @@ send_message_to_server_log(ErrorData *edata) /* * If the user wants the query that generated this error logged, do it. */ - if (edata->elevel >= log_min_error_statement && debug_query_string != NULL) + if (is_log_level_output(edata->elevel, log_min_error_statement) && + debug_query_string != NULL && + !edata->hide_stmt) { log_line_prefix(&buf); appendStringInfoString(&buf, _("STATEMENT: ")); @@ -2046,7 +2067,7 @@ write_stderr(const char *fmt,...) vsnprintf(errbuf, sizeof(errbuf), fmt, ap); - write_eventlog(EVENTLOG_ERROR_TYPE, errbuf); + write_eventlog(ERROR, errbuf); } else /* Not running as service, write to stderr */ @@ -2055,13 +2076,18 @@ write_stderr(const char *fmt,...) va_end(ap); } + +/* + * is_log_level_output -- is elevel logically >= log_min_level? + * + * We use this for tests that should consider LOG to sort out-of-order, + * between ERROR and FATAL. Generally this is the right thing for testing + * whether a message should go to the postmaster log, whereas a simple >= + * test is correct for testing whether the message should go to the client. + */ static bool is_log_level_output(int elevel, int log_min_level) { - /* - * Complicated because LOG is sorted out-of-order here, between - * ERROR and FATAL. - */ if (elevel == LOG || elevel == COMMERROR) { if (log_min_level == LOG || log_min_level <= ERROR) |