]> granicus.if.org Git - postgresql/commitdiff
Removed ELOG_TIMESTAMPS #define in favor of two run-time
authorPeter Eisentraut <peter_e@gmx.net>
Sun, 4 Jun 2000 15:06:34 +0000 (15:06 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
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 <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},
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,...);