aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/postmaster/postmaster.c10
-rw-r--r--src/backend/postmaster/syslogger.c16
-rw-r--r--src/backend/utils/error/elog.c1
-rw-r--r--src/backend/utils/misc/guc.c4
-rw-r--r--src/include/utils/elog.h1
5 files changed, 27 insertions, 5 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 55471085086..75f2f82548f 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -1183,7 +1183,17 @@ PostmasterMain(int argc, char *argv[])
* Log_destination permits. We don't do this until the postmaster is
* fully launched, since startup failures may as well be reported to
* stderr.
+ *
+ * If we are in fact disabling logging to stderr, first emit a log message
+ * saying so, to provide a breadcrumb trail for users who may not remember
+ * that their logging is configured to go somewhere else.
*/
+ if (!(Log_destination & LOG_DESTINATION_STDERR))
+ ereport(LOG,
+ (errmsg("ending log output to stderr"),
+ errhint("Future log output will go to log destination \"%s\".",
+ Log_destination_string)));
+
whereToSendOutput = DestNone;
/*
diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index e3b61025162..8b00aa525b2 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -634,6 +634,20 @@ SysLogger_Start(void)
/* now we redirect stderr, if not done already */
if (!redirection_done)
{
+#ifdef WIN32
+ int fd;
+#endif
+
+ /*
+ * Leave a breadcrumb trail when redirecting, in case the user
+ * forgets that redirection is active and looks only at the
+ * original stderr target file.
+ */
+ ereport(LOG,
+ (errmsg("redirecting log output to logging collector process"),
+ errhint("Future log output will appear in directory \"%s\".",
+ Log_directory)));
+
#ifndef WIN32
fflush(stdout);
if (dup2(syslogPipe[1], fileno(stdout)) < 0)
@@ -649,8 +663,6 @@ SysLogger_Start(void)
close(syslogPipe[1]);
syslogPipe[1] = -1;
#else
- int fd;
-
/*
* open the pipe in binary mode and make sure stderr is binary
* after it's been dup'ed into, to avoid disturbing the pipe
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 7f03f419dea..cebfeebad73 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -109,6 +109,7 @@ emit_log_hook_type emit_log_hook = NULL;
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;
#ifdef HAVE_SYSLOG
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index b53fdc2be37..a055231cfc0 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -442,8 +442,6 @@ int tcp_keepalives_count;
* cases provide the value for SHOW to display. The real state is elsewhere
* and is kept in sync by assign_hooks.
*/
-static char *log_destination_string;
-
static char *syslog_ident_str;
static bool phony_autocommit;
static bool session_auth_is_superuser;
@@ -2833,7 +2831,7 @@ static struct config_string ConfigureNamesString[] =
"depending on the platform."),
GUC_LIST_INPUT
},
- &log_destination_string,
+ &Log_destination_string,
"stderr",
check_log_destination, assign_log_destination, NULL
},
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 85bd2fdf8a2..76f6367840d 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -423,6 +423,7 @@ typedef enum
extern int Log_error_verbosity;
extern char *Log_line_prefix;
extern int Log_destination;
+extern char *Log_destination_string;
/* Log destination bitmap */
#define LOG_DESTINATION_STDERR 1