Add syslog_split_messages parameter

Reviewed-by: Andreas Karlsson <andreas@proxel.se>
This commit is contained in:
Peter Eisentraut 2016-03-15 22:48:53 -04:00
parent f4c454e9ba
commit fc201dfd95
5 changed files with 47 additions and 1 deletions

View File

@ -4333,6 +4333,39 @@ local0.* /var/log/postgresql
</listitem>
</varlistentry>
<varlistentry id="guc-syslog-split-messages" xreflabel="syslog_split_messages">
<term><varname>syslog_split_messages</varname> (<type>boolean</type>)
<indexterm>
<primary><varname>syslog_split_messages</> configuration parameter</primary>
</indexterm>
</term>
<listitem>
<para>
When logging to <application>syslog</> is enabled, this parameter
determines how messages are delivered to syslog. When on (the
default), messages are split by lines, and long lines are split so
that they will fit into 1024 bytes, which is a typical size limit for
traditional syslog implementations. When off, PostgreSQL server log
messages are delivered to the syslog service as is, and it is up to
the syslog service to cope with the potentially bulky messages.
</para>
<para>
If syslog is ultimately logging to a text file, then the effect will
be the same either way, and it is best to leave the setting on, since
most syslog implementations either cannot handle large messages or
would need to be specially configured to handle them. But if syslog
is ultimately writing into some other medium, it might be necessary or
more useful to keep messages logically together.
</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>

View File

@ -107,6 +107,7 @@ 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;
bool syslog_split_messages = true;
#ifdef HAVE_SYSLOG
@ -1966,7 +1967,7 @@ write_syslog(int level, const char *line)
*/
len = strlen(line);
nlpos = strchr(line, '\n');
if (len > PG_SYSLOG_LIMIT || nlpos != NULL)
if (syslog_split_messages && (len > PG_SYSLOG_LIMIT || nlpos != NULL))
{
int chunk_nr = 0;

View File

@ -1642,6 +1642,16 @@ static struct config_bool ConfigureNamesBool[] =
NULL, NULL, NULL
},
{
{"syslog_split_messages", PGC_SIGHUP, LOGGING_WHERE,
gettext_noop("Split messages sent to syslog by lines and to fit into 1024 bytes."),
NULL
},
&syslog_split_messages,
true,
NULL, NULL, NULL
},
/* End-of-list marker */
{
{NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL, NULL

View File

@ -359,6 +359,7 @@
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'
#syslog_sequence_numbers = on
#syslog_split_messages = on
# This is only relevant when logging to eventlog (win32):
#event_source = 'PostgreSQL'

View File

@ -398,6 +398,7 @@ extern char *Log_line_prefix;
extern int Log_destination;
extern char *Log_destination_string;
extern bool syslog_sequence_numbers;
extern bool syslog_split_messages;
/* Log destination bitmap */
#define LOG_DESTINATION_STDERR 1