diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c index 8ad18b51d5485182dff3864ecf0bee65790bab99..d2b4270233613ac6b90458e82063169f1cda1e1c 100644 --- a/src/backend/postmaster/syslogger.c +++ b/src/backend/postmaster/syslogger.c @@ -87,6 +87,7 @@ extern bool redirection_done; */ static pg_time_t next_rotation_time; static bool pipe_eof_seen = false; +static bool rotation_disabled = false; static FILE *syslogFile = NULL; static FILE *csvlogFile = NULL; static char *last_file_name = NULL; @@ -317,6 +318,11 @@ SysLoggerMain(int argc, char *argv[]) pfree(currentLogDir); currentLogDir = pstrdup(Log_directory); rotation_requested = true; + + /* + * Also, create new directory if not present; ignore errors + */ + mkdir(Log_directory, S_IRWXU); } if (strcmp(Log_filename, currentLogFilename) != 0) { @@ -334,9 +340,19 @@ SysLoggerMain(int argc, char *argv[]) currentLogRotationAge = Log_RotationAge; set_next_rotation_time(); } + + /* + * If we had a rotation-disabling failure, re-enable rotation + * attempts after SIGHUP, and force one immediately. + */ + if (rotation_disabled) + { + rotation_disabled = false; + rotation_requested = true; + } } - if (!rotation_requested && Log_RotationAge > 0) + if (!rotation_requested && Log_RotationAge > 0 && !rotation_disabled) { /* Do a logfile rotation if it's time */ pg_time_t now = time(NULL); @@ -345,7 +361,7 @@ SysLoggerMain(int argc, char *argv[]) rotation_requested = time_based_rotation = true; } - if (!rotation_requested && Log_RotationSize > 0) + if (!rotation_requested && Log_RotationSize > 0 && !rotation_disabled) { /* Do a rotation if file is too big */ if (ftell(syslogFile) >= Log_RotationSize * 1024L) @@ -1107,8 +1123,7 @@ logfile_rotate(bool time_based_rotation, int size_rotation_for) { ereport(LOG, (errmsg("disabling automatic rotation (use SIGHUP to reenable)"))); - Log_RotationAge = 0; - Log_RotationSize = 0; + rotation_disabled = true; } if (filename) @@ -1165,8 +1180,7 @@ logfile_rotate(bool time_based_rotation, int size_rotation_for) { ereport(LOG, (errmsg("disabling automatic rotation (use SIGHUP to reenable)"))); - Log_RotationAge = 0; - Log_RotationSize = 0; + rotation_disabled = true; } if (filename)