From 0a54de8fafeb32b9524d48e9abf519933c62c690 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 4 Jun 2000 15:06:34 +0000
Subject: [PATCH] Removed ELOG_TIMESTAMPS #define in favor of two run-time
 configuration options `Log_timestamp' and `Log_pid'.

---
 src/backend/utils/error/elog.c | 113 +++++++++++++++++++--------------
 src/backend/utils/misc/guc.c   |   6 +-
 src/include/config.h.in        |   7 +-
 src/include/utils/elog.h       |   5 +-
 4 files changed, 75 insertions(+), 56 deletions(-)

diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 19c107ddb6e..5b05b81a183 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.59 2000/05/31 00:28:32 petere Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.60 2000/06/04 15:06:29 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -57,15 +57,14 @@ static void write_syslog(int level, const char *line);
 # define Use_syslog 0
 #endif
 
+bool Log_timestamp;
+bool Log_pid;
 
-#ifdef ELOG_TIMESTAMPS
-static const char * print_timestamp(void);
-# define TIMESTAMP_SIZE 28
-#else
-# define TIMESTAMP_SIZE 0
-#endif
-
+#define TIMESTAMP_SIZE 20		/* format `YYYY-MM-DD HH:MM:SS ' */
+#define PID_SIZE 9				/* format `[123456] ' */
 
+static const char * print_timestamp(void);
+static const char * print_pid(void);
 
 static int	Debugfile = -1;
 static int	Err_file = -1;
@@ -117,11 +116,9 @@ elog(int lev, const char *fmt,...)
 	int			indent = 0;
 	int			space_needed;
 
-#ifdef USE_SYSLOG
-	int			log_level;
-
-#endif
 	int			len;
+	/* size of the prefix needed for timestamp and pid, if enabled */
+	size_t      timestamp_size;
 
 	if (lev <= DEBUG && Debugfile < 0)
 		return;					/* ignore debug msgs if noplace to send */
@@ -174,13 +171,19 @@ elog(int lev, const char *fmt,...)
 		errorstr = errorstr_buf;
 	}
 
+	timestamp_size = 0;
+	if (Log_timestamp)
+		timestamp_size += TIMESTAMP_SIZE;
+	if (Log_pid)
+		timestamp_size += PID_SIZE;
+
 	/*
 	 * Set up the expanded format, consisting of the prefix string plus
 	 * input format, with any %m replaced by strerror() string (since
 	 * vsnprintf won't know what to do with %m).  To keep space
 	 * calculation simple, we only allow one %m.
 	 */
-	space_needed = TIMESTAMP_SIZE + strlen(prefix) + indent + (lineno ? 24 : 0)
+	space_needed = timestamp_size + strlen(prefix) + indent + (lineno ? 24 : 0)
 		+ strlen(fmt) + strlen(errorstr) + 1;
 	if (space_needed > (int) sizeof(fmt_fixedbuf))
 	{
@@ -194,12 +197,16 @@ elog(int lev, const char *fmt,...)
 												 * fmt_fixedbuf! */
 		}
 	}
-#ifdef ELOG_TIMESTAMPS
-	strcpy(fmt_buf, print_timestamp());
+
+	fmt_buf[0] = '\0';
+
+	if (Log_timestamp)
+		strcat(fmt_buf, print_timestamp());
+	if (Log_pid)
+		strcat(fmt_buf, print_pid());
+
 	strcat(fmt_buf, prefix);
-#else
-	strcpy(fmt_buf, prefix);
-#endif
+
 	bp = fmt_buf + strlen(fmt_buf);
 	while (indent-- > 0)
 		*bp++ = ' ';
@@ -277,12 +284,12 @@ elog(int lev, const char *fmt,...)
 			/* We're up against it, convert to fatal out-of-memory error */
 			msg_buf = msg_fixedbuf;
 			lev = REALLYFATAL;
-#ifdef ELOG_TIMESTAMPS
-			strcpy(msg_buf, print_timestamp());
+			msg_buf[0] = '\0';
+			if (Log_timestamp)
+				strcat(msg_buf, print_timestamp());
+			if (Log_pid)
+				strcat(msg_buf, print_pid());
 			strcat(msg_buf, "FATAL:  elog: out of memory");
-#else
-			strcpy(msg_buf, "FATAL:  elog: out of memory");
-#endif
 			break;
 		}
 	}
@@ -318,7 +325,7 @@ elog(int lev, const char *fmt,...)
 				syslog_level = LOG_CRIT;
 		}
 
-		write_syslog(syslog_level, msg_buf + TIMESTAMP_SIZE);
+		write_syslog(syslog_level, msg_buf + timestamp_size);
 	}
 #endif /* ENABLE_SYSLOG */
 
@@ -373,7 +380,7 @@ elog(int lev, const char *fmt,...)
 			msgtype = 'E';
 		}
 		/* exclude the timestamp from msg sent to frontend */
-		pq_puttextmessage(msgtype, msg_buf + TIMESTAMP_SIZE);
+		pq_puttextmessage(msgtype, msg_buf + timestamp_size);
 
 		/*
 		 * This flush is normally not necessary, since postgres.c will
@@ -525,33 +532,45 @@ DebugFileOpen(void)
 #endif
 
 
-#ifdef ELOG_TIMESTAMPS
+
 /*
- * Return a timestamp string like "980119.17:25:59.902 [21974] "
+ * Return a timestamp string like
+ *
+ *   "2000-06-04 13:12:03 "
  */
 static const char *
-print_timestamp()
+print_timestamp(void)
 {
-	struct timeval tv;
-	struct timezone tz = { 0, 0 };
-	struct tm  *time;
-	time_t		tm;
-	static char timestamp[32],
-				pid[8];
-
-	gettimeofday(&tv, &tz);
-	tm = tv.tv_sec;
-	time = localtime(&tm);
-
-	sprintf(pid, "[%d]", MyProcPid);
-	sprintf(timestamp, "%02d%02d%02d.%02d:%02d:%02d.%03d %7s ",
-			time->tm_year % 100, time->tm_mon + 1, time->tm_mday,
-			time->tm_hour, time->tm_min, time->tm_sec,
-			(int) (tv.tv_usec/1000), pid);
-
-	return timestamp;
+	time_t curtime;
+	static char buf[TIMESTAMP_SIZE + 1];
+
+	curtime = time(NULL);
+
+	strftime(buf, sizeof(buf),
+			 "%Y-%m-%d %H:%M:%S ",
+			 localtime(&curtime));
+
+	return buf;
 }
-#endif
+
+
+
+/*
+ * Return a string like
+ *
+ *     "[123456] "
+ *
+ * with the current pid.
+ */
+static const char *
+print_pid(void)
+{
+	static char buf[PID_SIZE + 1];
+
+	snprintf(buf, PID_SIZE + 1, "[%d]      ", (int)MyProcPid);
+	return buf;
+}
+
 
 
 #ifdef ENABLE_SYSLOG
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 7382c677028..8a7dbdad24c 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -4,7 +4,7 @@
  * Support for grand unified configuration scheme, including SET
  * command, configuration file, and command line options.
  *
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.1 2000/05/31 00:28:34 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.2 2000/06/04 15:06:30 petere Exp $
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  * Written by Peter Eisentraut <peter_e@gmx.net>.
@@ -139,9 +139,11 @@ ConfigureNamesBool[] =
 	{"geqo",                    PGC_USERSET,    &enable_geqo,           true},
 
 	{"net_server",              PGC_POSTMASTER, &NetServer,             false},
-	{"fsync",                   PGC_POSTMASTER, &enableFsync,           true},
+	{"fsync",                   PGC_BACKEND,    &enableFsync,           true},
 
 	{"log_connections",         PGC_POSTMASTER, &Log_connections,       false},
+	{"log_timestamp",           PGC_BACKEND,    &Log_timestamp,         false},
+	{"log_pid",                 PGC_BACKEND,    &Log_pid,               false},
 
 	{"debug_print_query",       PGC_SUSET,      &Debug_print_query,     false},
 	{"debug_print_parse",       PGC_SUSET,      &Debug_print_parse,     false},
diff --git a/src/include/config.h.in b/src/include/config.h.in
index 76390c3c973..4b6e58cf8a3 100644
--- a/src/include/config.h.in
+++ b/src/include/config.h.in
@@ -8,7 +8,7 @@
  * or in config.h afterwards.  Of course, if you edit config.h, then your
  * changes will be overwritten the next time you run configure.
  *
- * $Id: config.h.in,v 1.115 2000/06/04 01:44:36 petere Exp $
+ * $Id: config.h.in,v 1.116 2000/06/04 15:06:32 petere Exp $
  */
 
 #ifndef CONFIG_H
@@ -140,11 +140,6 @@
  */
 #define TBL_FREE_CMD_MEMORY
 
-/*
- * ELOG_TIMESTAMPS: adds a timestamp with the following format to elog
- * messages:  yymmdd.hh:mm:ss.mmm [pid] message
- */
-/* #define ELOG_TIMESTAMPS */
 
 #undef ENABLE_SYSLOG
 
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 94dc8330b11..5fba756f391 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: elog.h,v 1.17 2000/05/31 00:28:40 petere Exp $
+ * $Id: elog.h,v 1.18 2000/06/04 15:06:34 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -27,6 +27,9 @@
 extern int Use_syslog;
 #endif
 
+extern bool Log_timestamp;
+extern bool Log_pid;
+
 #ifndef __GNUC__
 extern void elog(int lev, const char *fmt,...);
 
-- 
GitLab