From: Jeff Davis <pgsql@j-davis.com>
To: Michael Paquier <michael@paquier.xyz>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: pgsql-hackers@postgresql.org
Subject: Re: Export log_line_prefix(); useful for emit_log_hook.
Date: Mon, 04 Jul 2022 13:24:36 -0700
Message-ID: <6afdaff716ea203519076dfd935d86af269acc2c.camel@j-davis.com> (raw)
In-Reply-To: <YsKOtLNJy/nmlcVp@paquier.xyz>
References: <39c8197652f4d3050aedafae79fa5af31096505f.camel@j-davis.com>
<20220629130942.dqac3h3746pjvauq@alvherre.pgsql>
<YsKOtLNJy/nmlcVp@paquier.xyz>
On Mon, 2022-07-04 at 15:54 +0900, Michael Paquier wrote:
> On Wed, Jun 29, 2022 at 03:09:42PM +0200, Alvaro Herrera wrote:
> > Hmm, maybe your hypothetical book would prefer to use a different
> > setting for log line prefix than Log_line_prefix, so it would make
> > sense
> > to pass the format string as a parameter to the function instead of
> > relying on the GUC global.
That is nicer, attached.
I also renamed the function log_status_format(), and made
log_line_prefix() a thin wrapper over that. I think that's less
confusing.
Regards,
Jeff Davis
Attachments:v2-0001-Provide-log_status_format-useful-for-an-emit_log_hoo.patch (text/x-patch, 2.3K) download
From 4c64049e500c80ac495732d34ae56e07393115fe Mon Sep 17 00:00:00 2001
From: Jeff Davis <jeff@j-davis.com>
Date: Tue, 28 Jun 2022 11:39:33 -0700
Subject: [PATCH] Provide log_status_format(), useful for an emit_log_hook.
Refactor so that log_line_prefix() is a thin wrapper over a new
function log_status_format(), and move the implementation to the
latter. Export log_status_format() so that it can be used by an
emit_log_hook.
---
src/backend/utils/error/elog.c | 15 ++++++++++++---
src/include/utils/elog.h | 3 +++
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.cindex 55ee5423afb..7b2bb9c8b75 100644--- a/src/backend/utils/error/elog.c+++ b/src/backend/utils/error/elog.c@@ -2439,10 +2439,19 @@ process_log_prefix_padding(const char *p, int *ppadding)
}
/*
- * Format tag info for log lines; append to the provided buffer.+ * Format log status information using Log_line_prefix.
*/
static void
log_line_prefix(StringInfo buf, ErrorData *edata)
+{+ log_status_format(buf, Log_line_prefix, edata);+}++/*+ * Format log status info; append to the provided buffer.+ */+void+log_status_format(StringInfo buf, char *format, ErrorData *edata)
{
/* static counter for line numbers */
static long log_line_number = 0;
@@ -2466,10 +2475,10 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
}
log_line_number++;
- if (Log_line_prefix == NULL)+ if (format == NULL)
return; /* in case guc hasn't run yet */
- for (p = Log_line_prefix; *p != '\0'; p++)+ for (p = format; *p != '\0'; p++)
{
if (*p != '%')
{
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.hindex f5c6cd904de..e88e3f8a801 100644--- a/src/include/utils/elog.h+++ b/src/include/utils/elog.h@@ -16,6 +16,8 @@
#include <setjmp.h>
+#include "lib/stringinfo.h"+
/* Error level codes */
#define DEBUG5 10 /* Debugging messages, in categories of
* decreasing detail. */
@@ -439,6 +441,7 @@ extern PGDLLIMPORT bool syslog_split_messages;
#define LOG_DESTINATION_JSONLOG 16
/* Other exported functions */
+extern void log_status_format(StringInfo buf, char *format, ErrorData *edata);
extern void DebugFileOpen(void);
extern char *unpack_sql_state(int sql_state);
extern bool in_error_recursion_trouble(void);
--
2.17.1
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: pgsql@j-davis.com, michael@paquier.xyz, alvherre@alvh.no-ip.org
Subject: Re: Export log_line_prefix(); useful for emit_log_hook.
In-Reply-To: <6afdaff716ea203519076dfd935d86af269acc2c.camel@j-davis.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox