bool output_to_server;
bool output_to_client = false;
int i;
-
+ int eflags = elevel & LOG_FLAG_MASK;
+ elevel = elevel & ~LOG_FLAG_MASK;
/*
* Check some cases in which we want to promote an error into a more
* severe error. None of this logic applies for non-error messages.
output_to_server = (elevel >= log_min_messages);
/* Determine whether message is enabled for client output */
- if (whereToSendOutput == DestRemote && elevel != COMMERROR)
+ if (whereToSendOutput == DestRemote)
{
/*
* client_min_messages is honored only after we complete the
edata = &errordata[errordata_stack_depth];
MemSet(edata, 0, sizeof(ErrorData));
edata->elevel = elevel;
+ edata->eflags = eflags;
edata->output_to_server = output_to_server;
edata->output_to_client = output_to_client;
edata->filename = filename;
send_message_to_server_log(edata);
/* Send to client, if enabled */
- if (edata->output_to_client)
+ if (edata->output_to_client && !(edata->eflags & LOG_NO_CLIENT))
send_message_to_frontend(edata);
MemoryContextSwitchTo(oldcontext);
#include <setjmp.h>
+#define LOG_FLAG_MASK ((~0)<<20)
+
+/* logging flags */
+#define LOG_NO_CLIENT (2<<30) /* Don't send to the client. Helpfull
+ * if it would confuse the client at
+ * that moment */
+
/* Error level codes */
#define DEBUG5 10 /* Debugging messages, in categories of
* decreasing detail. */
#define DEBUG1 14 /* used by GUC debug_* variables */
#define LOG 15 /* Server operational messages; sent only to
* server log by default. */
-#define COMMERROR 16 /* Client communication problems; same as LOG
+#define COMMERROR (LOG|LOG_NO_CLIENT)/* Client communication problems; same as LOG
* for server reporting, but never sent to
- * client. */
-#define INFO 17 /* Messages specifically requested by user (eg
+ * client. For backward compatibility this is
+ * is available without explicitly specifying
+ * LOG_NO_CLIENT.*/
+#define INFO 16 /* Messages specifically requested by user (eg
* VACUUM VERBOSE output); always sent to
* client regardless of client_min_messages,
* but by default not sent to server log. */
-#define NOTICE 18 /* Helpful messages to users about query
+#define NOTICE 17 /* Helpful messages to users about query
* operation; sent to client and server log by
* default. */
-#define WARNING 19 /* Warnings. NOTICE is for expected messages
+#define WARNING 18 /* Warnings. NOTICE is for expected messages
* like implicit sequence creation by SERIAL.
* WARNING is for unexpected messages. */
-#define ERROR 20 /* user error - abort transaction; return to
+#define ERROR 19 /* user error - abort transaction; return to
* known state */
/* Save ERROR value in PGERROR so it can be restored when Win32 includes
* modify it. We have to use a constant rather than ERROR because macros
* are expanded only when referenced outside macros.
*/
#ifdef WIN32
-#define PGERROR 20
+#define PGERROR 19
#endif
-#define FATAL 21 /* fatal error - abort process */
-#define PANIC 22 /* take down the other backends with me */
+#define FATAL 20 /* fatal error - abort process */
+#define PANIC 21 /* take down the other backends with me */
+
/* #define DEBUG DEBUG1 */ /* Backward compatibility with pre-7.3 */
typedef struct ErrorData
{
int elevel; /* error level */
+ int eflags; /* error flags */
bool output_to_server; /* will report to server log? */
bool output_to_client; /* will report to client? */
bool show_funcname; /* true to force funcname inclusion */