*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
# 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;
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 */
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))
{
* 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++ = ' ';
/* 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;
}
}
syslog_level = LOG_CRIT;
}
- write_syslog(syslog_level, msg_buf + TIMESTAMP_SIZE);
+ write_syslog(syslog_level, msg_buf + timestamp_size);
}
#endif /* ENABLE_SYSLOG */
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
#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
* 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>.
{"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},