Removed ELOG_TIMESTAMPS #define in favor of two run-time
authorPeter Eisentraut
Sun, 4 Jun 2000 15:06:34 +0000 (15:06 +0000)
committerPeter Eisentraut
Sun, 4 Jun 2000 15:06:34 +0000 (15:06 +0000)
configuration options `Log_timestamp' and `Log_pid'.

src/backend/utils/error/elog.c
src/backend/utils/misc/guc.c
src/include/config.h.in
src/include/utils/elog.h

index 19c107ddb6e848d7a1a69f2c926348dc5c9a8275..5b05b81a183752db514582dcc65c8095feaaca0b 100644 (file)
@@ -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
index 7382c67702864f25ff20ceced926a9a22a2f2bd8..8a7dbdad24c55a6808ea027b18b1553f6e2cfbb9 100644 (file)
@@ -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 .
@@ -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},
index 76390c3c973d0091325048c0e81aa946c22795c8..4b6e58cf8a36c2498f2d52e0780ecccfc99829d6 100644 (file)
@@ -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
  */
 #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
 
index 94dc8330b1164c875b1ba0ba8d752cec7a8b872a..5fba756f39121a2bd698dfb4bff9e9b1a1bbe757 100644 (file)
@@ -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,...);