diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 5d5f2d2..b49711f 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -4912,6 +4912,23 @@ local0.* /var/log/postgresql + + log_rotate_on_sighup (boolean) + + log_rotate_on_sighup configuration parameter + + + + + When logging_collector is enabled, + this parameter will cause the log file to be rotated when the + postgres server receives SIGHUP. + This parameter can only be set in the postgresql.conf + file or on the server command line. + + + + log_truncate_on_rotation (boolean) diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 58b759f..70091cd 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -64,6 +64,7 @@ bool Logging_collector = false; int Log_RotationAge = HOURS_PER_DAY * MINS_PER_HOUR; int Log_RotationSize = 10 * 1024; +bool Log_rotate_on_sighup; char *Log_directory = NULL; char *Log_filename = NULL; bool Log_truncate_on_rotation = false; @@ -353,6 +354,12 @@ SysLoggerMain(int argc, char *argv[]) } /* + * Force rotation on SIGHUP if configured to do so. + */ + if (Log_rotate_on_sighup) + rotation_requested = true; + + /* * Force rewriting last log filename when reloading configuration. * Even if rotation_requested is false, log_destination may have * been changed and we don't want to wait the next file rotation. diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index fa92ce2..924dc0b 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1494,6 +1494,15 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { + {"log_rotate_on_sighup", PGC_SIGHUP, LOGGING_WHERE, + gettext_noop("Automatic log file rotation will occur on SIGHUP."), + NULL + }, + &Log_rotate_on_sighup, + false, + NULL, NULL, NULL + }, + { {"log_truncate_on_rotation", PGC_SIGHUP, LOGGING_WHERE, gettext_noop("Truncate existing log files of same name during log rotation."), NULL diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 66d0938..0a8b88c 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -389,6 +389,8 @@ #log_rotation_size = 10MB # Automatic rotation of logfiles will # happen after that much log output. # 0 disables. +#log_rotate_on_sighup = off # If on, automatic rotation of logfiles + # will happen on SIGHUP. # These are relevant when logging to syslog: #syslog_facility = 'LOCAL0' diff --git a/src/include/postmaster/syslogger.h b/src/include/postmaster/syslogger.h index b35fadc..3b45dd5 100644 --- a/src/include/postmaster/syslogger.h +++ b/src/include/postmaster/syslogger.h @@ -65,6 +65,7 @@ typedef union extern bool Logging_collector; extern int Log_RotationAge; extern int Log_RotationSize; +extern bool Log_rotate_on_sighup; extern PGDLLIMPORT char *Log_directory; extern PGDLLIMPORT char *Log_filename; extern bool Log_truncate_on_rotation;