Add syslog_sequence_numbers parameter
authorPeter Eisentraut <peter_e@gmx.net>
Sat, 27 Feb 2016 03:34:30 +0000 (22:34 -0500)
committerPeter Eisentraut <peter_e@gmx.net>
Thu, 17 Mar 2016 03:21:44 +0000 (23:21 -0400)
Reviewed-by: Andreas Karlsson <andreas@proxel.se>
doc/src/sgml/config.sgml
src/backend/utils/error/elog.c
src/backend/utils/misc/guc.c
src/backend/utils/misc/postgresql.conf.sample
src/include/utils/elog.h

index da971f5fca673a083f9ec62155df015e5c5499c0..34dad867b2e5bf950e3dd608ca23645834d25f4e 100644 (file)
@@ -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>
index 5b7554b6ea14ba7e86d610c4078e77ecdaa53172..88421c72a2a4fdebe5282b99e66d5620bdeefe56 100644 (file)
@@ -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 */
index be9d5cacc07e9a26d1c33fb108ec860747edcd7a..eb2b487acfa0fba0207c371bddca921b9a43ca02 100644 (file)
@@ -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
index a6bb33557cb4722fcdfdd305e77599d5e1f2791a..08fc668dff474de4e91f858f766d05e4368b1db9 100644 (file)
 # 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'
index 7d338dd1ceab5bc1f73e0de557891555426683e8..e245b2ee5f8c1ea8ded384145eb79969b61299ea 100644 (file)
@@ -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