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
From 4c64049e500c80ac495732d34ae56e07393115fe Mon Sep 17 00:00:00 2001 From: Jeff Davis <j...@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.c index 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.h index 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