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