From f4c454e9ba5262c5614c7637983c83b8c327e231 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 26 Feb 2016 22:34:30 -0500 Subject: [PATCH] Add syslog_sequence_numbers parameter Reviewed-by: Andreas Karlsson --- doc/src/sgml/config.sgml | 28 +++++++++++++++++++ src/backend/utils/error/elog.c | 12 ++++++-- src/backend/utils/misc/guc.c | 10 +++++++ src/backend/utils/misc/postgresql.conf.sample | 1 + src/include/utils/elog.h | 1 + 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index da971f5fca..34dad867b2 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4305,6 +4305,34 @@ local0.* /var/log/postgresql + + syslog_sequence_numbers (boolean) + + syslog_sequence_numbers configuration parameter + + + + + + When logging to syslog and this is on (the + default), then each message will be prefixed by an increasing + sequence number (such as [2]). This circumvents + the --- last message repeated N times --- suppression + that many syslog implementations perform by default. In more modern + syslog implementations, repeat message suppression can be configured + (for example, $RepeatedMsgReduction + in rsyslog), so this might not be + necessary. Also, you could turn this off if you actually want to + suppress repeated messages. + + + + This parameter can only be set in the postgresql.conf + file or on the server command line. + + + + event_source (string) diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 5b7554b6ea..88421c72a2 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -106,6 +106,7 @@ int Log_error_verbosity = PGERROR_VERBOSE; char *Log_line_prefix = NULL; /* format for extra log line info */ int Log_destination = LOG_DESTINATION_STDERR; char *Log_destination_string = NULL; +bool syslog_sequence_numbers = true; #ifdef HAVE_SYSLOG @@ -2018,7 +2019,11 @@ write_syslog(int level, const char *line) chunk_nr++; - syslog(level, "[%lu-%d] %s", seq, chunk_nr, buf); + if (syslog_sequence_numbers) + syslog(level, "[%lu-%d] %s", seq, chunk_nr, buf); + else + syslog(level, "[%d] %s", chunk_nr, buf); + line += buflen; len -= buflen; } @@ -2026,7 +2031,10 @@ write_syslog(int level, const char *line) else { /* message short enough */ - syslog(level, "[%lu] %s", seq, line); + if (syslog_sequence_numbers) + syslog(level, "[%lu] %s", seq, line); + else + syslog(level, "%s", line); } } #endif /* HAVE_SYSLOG */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index be9d5cacc0..eb2b487acf 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1632,6 +1632,16 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, + { + {"syslog_sequence_numbers", PGC_SIGHUP, LOGGING_WHERE, + gettext_noop("Add sequence number to syslog messags to avoid duplicate suppression."), + NULL + }, + &syslog_sequence_numbers, + true, + NULL, NULL, NULL + }, + /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL, NULL diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index a6bb33557c..08fc668dff 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -358,6 +358,7 @@ # These are relevant when logging to syslog: #syslog_facility = 'LOCAL0' #syslog_ident = 'postgres' +#syslog_sequence_numbers = on # This is only relevant when logging to eventlog (win32): #event_source = 'PostgreSQL' diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 7d338dd1ce..e245b2ee5f 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -397,6 +397,7 @@ extern int Log_error_verbosity; extern char *Log_line_prefix; extern int Log_destination; extern char *Log_destination_string; +extern bool syslog_sequence_numbers; /* Log destination bitmap */ #define LOG_DESTINATION_STDERR 1