From 76fa5e6e183f41fe86379f70ff94314b63f011ce Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 27 Feb 2005 01:02:57 +0000
Subject: [PATCH] Cause Win32 to output to the event log rather than stderr by
 default.

Magnus Hagander
---
 src/backend/utils/error/elog.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 36474d0a90f..80b222913ec 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -42,7 +42,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.156 2005/02/22 04:37:38 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.157 2005/02/27 01:02:57 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1630,7 +1630,18 @@ send_message_to_server_log(ErrorData *edata)
 #endif   /* WIN32 */
 	/* Write to stderr, if enabled */
 	if ((Log_destination & LOG_DESTINATION_STDERR) || whereToSendOutput == Debug)
+	{
+#ifdef WIN32
+		/* In a win32 service environment, there is no usable stderr. Capture
+		   anything going there and write it to the eventlog instead.
+		   If stderr redirection is active, leave it to stderr because the
+		   logger will capture it to a file. */
+		if ((!Redirect_stderr || am_syslogger) && pgwin32_is_service())
+			write_eventlog(EVENTLOG_ERROR_TYPE, buf.data);
+		else
+#endif
 		fprintf(stderr, "%s", buf.data);
+	}
 
 	/* If in the syslogger process, try to write messages direct to file */
 	if (am_syslogger)
-- 
GitLab