diff --git a/src/backend/utils/misc/trace.c b/src/backend/utils/misc/trace.c
index 527f041e098c392979a0e4140e3021a3e1a32200..fb3289d7bc181fc9076ec3fa71209288722b60a6 100644
--- a/src/backend/utils/misc/trace.c
+++ b/src/backend/utils/misc/trace.c
@@ -129,6 +129,34 @@ tprintf(int flag, const char *fmt,...)
 	return 1;
 }
 
+/*
+ * Print a timestamp and a message to stdout or to syslog.
+ */
+int
+tprintf1(const char *fmt, ... )
+{
+	va_list		ap;
+	char		line[ELOG_MAXLEN+TIMESTAMP_SIZE+1];
+
+	va_start(ap, fmt);
+#ifdef ELOG_TIMESTAMPS
+	strcpy(line, tprintf_timestamp());
+#endif
+	vsprintf(line+TIMESTAMP_SIZE, fmt, ap);
+	va_end(ap);
+
+#ifdef USE_SYSLOG
+	write_syslog(LOG_INFO, line+TIMESTAMP_SIZE);
+#endif
+
+	if (UseSyslog <= 1) {
+		puts(line);
+		fflush(stdout);
+	}
+
+	return 1;
+}
+
 /*
  * Print a timestamp and a message to stderr.
  */
diff --git a/src/include/utils/trace.h b/src/include/utils/trace.h
index 4d71b20ea21c49957efc8f5057d49a39e04f4f1a..8f716393c67028aeb9f906901e35046098f570f5 100644
--- a/src/include/utils/trace.h
+++ b/src/include/utils/trace.h
@@ -27,6 +27,7 @@ char	   *tprintf_timestamp(void);
 #define TIMESTAMP_SIZE 0
 #endif
 
+extern int	tprintf1(const char *fmt, ...);
 extern int	tprintf(int flag, const char *fmt,...);
 extern int	eprintf(const char *fmt,...);
 extern int	option_flag(int flag);
@@ -75,9 +76,15 @@ enum pg_option_enum
 
 extern int	pg_options[NUM_PG_OPTIONS];
 
-#define PRINTF(args...)			tprintf(TRACE_ALL, args)
-#define EPRINTF(args...)		eprintf(args)
+#ifdef __GNUC__
+#define PRINTF(args...)			tprintf1(args)
+#define EPRINTF(args...) 		eprintf(args)
 #define TPRINTF(flag, args...)	tprintf(flag, args)
+#else
+#define PRINTF	tprintf1
+#define EPRINTF eprintf
+#define TPRINTF	tprintf
+#endif
 
 #endif	 /* TRACE_H */