summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2016-02-27 03:34:30 +0000
committerPeter Eisentraut2016-03-17 03:21:44 +0000
commitf4c454e9ba5262c5614c7637983c83b8c327e231 (patch)
treec541c87bb901e244abf066ec821132a44725cdcb
parent47211af17a2dbee38b53b2ea6de81499dbb2c7f5 (diff)
Add syslog_sequence_numbers parameter
Reviewed-by: Andreas Karlsson <[email protected]>
-rw-r--r--doc/src/sgml/config.sgml28
-rw-r--r--src/backend/utils/error/elog.c12
-rw-r--r--src/backend/utils/misc/guc.c10
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample1
-rw-r--r--src/include/utils/elog.h1
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
</listitem>
</varlistentry>
+ <varlistentry id="guc-syslog-sequence-numbers" xreflabel="syslog_sequence_numbers">
+ <term><varname>syslog_sequence_numbers</varname> (<type>boolean</type>)
+ <indexterm>
+ <primary><varname>syslog_sequence_numbers</> configuration parameter</primary>
+ </indexterm>
+ </term>
+
+ <listitem>
+ <para>
+ When logging to <application>syslog</application> and this is on (the
+ default), then each message will be prefixed by an increasing
+ sequence number (such as <literal>[2]</literal>). This circumvents
+ the <quote>--- last message repeated N times ---</quote> suppression
+ that many syslog implementations perform by default. In more modern
+ syslog implementations, repeat message suppression can be configured
+ (for example, <literal>$RepeatedMsgReduction</literal>
+ in <productname>rsyslog</productname>), so this might not be
+ necessary. Also, you could turn this off if you actually want to
+ suppress repeated messages.
+ </para>
+
+ <para>
+ This parameter can only be set in the <filename>postgresql.conf</>
+ file or on the server command line.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="guc-event-source" xreflabel="event_source">
<term><varname>event_source</varname> (<type>string</type>)
<indexterm>
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