From 3e00496d88a2a0e894d34302d9504826bc86e510 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 17 Oct 2008 22:56:16 +0000 Subject: [PATCH] Refactor some duplicate code to set up formatted_log_time and formatted_start_time. --- src/backend/utils/error/elog.c | 134 +++++++++++++++------------------ 1 file changed, 62 insertions(+), 72 deletions(-) diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 178c55ad59..c458ecf319 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -42,7 +42,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.207 2008/10/09 17:24:05 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.208 2008/10/17 22:56:16 alvherre Exp $ * *------------------------------------------------------------------------- */ @@ -146,6 +146,8 @@ static void append_with_tabs(StringInfo buf, const char *str); static bool is_log_level_output(int elevel, int log_min_level); static void write_pipe_chunks(char *data, int len, int dest); static void write_csvlog(ErrorData *edata); +static void setup_formatted_log_time(void); +static void setup_formatted_start_time(void); /* * errstart --- begin an error-reporting cycle @@ -1481,6 +1483,60 @@ write_eventlog(int level, const char *line) } #endif /* WIN32 */ +/* + * setup formatted_log_time, for consistent times between CSV and regular logs + */ +static void +setup_formatted_log_time(void) +{ + struct timeval tv; + pg_time_t stamp_time; + pg_tz *tz; + char msbuf[8]; + + gettimeofday(&tv, NULL); + stamp_time = (pg_time_t) tv.tv_sec; + + /* + * Normally we print log timestamps in log_timezone, but during startup we + * could get here before that's set. If so, fall back to gmt_timezone + * (which guc.c ensures is set up before Log_line_prefix can become + * nonempty). + */ + tz = log_timezone ? log_timezone : gmt_timezone; + + pg_strftime(formatted_log_time, FORMATTED_TS_LEN, + /* leave room for milliseconds... */ + "%Y-%m-%d %H:%M:%S %Z", + pg_localtime(&stamp_time, tz)); + + /* 'paste' milliseconds into place... */ + sprintf(msbuf, ".%03d", (int) (tv.tv_usec / 1000)); + strncpy(formatted_log_time + 19, msbuf, 4); +} + +/* + * setup formatted_start_time + */ +static void +setup_formatted_start_time(void) +{ + pg_time_t stamp_time = (pg_time_t) MyStartTime; + pg_tz *tz; + + /* + * Normally we print log timestamps in log_timezone, but during startup we + * could get here before that's set. If so, fall back to gmt_timezone + * (which guc.c ensures is set up before Log_line_prefix can become + * nonempty). + */ + tz = log_timezone ? log_timezone : gmt_timezone; + + pg_strftime(formatted_start_time, FORMATTED_TS_LEN, + "%Y-%m-%d %H:%M:%S %Z", + pg_localtime(&stamp_time, tz)); +} + /* * Format tag info for log lines; append to the provided buffer. */ @@ -1561,34 +1617,8 @@ log_line_prefix(StringInfo buf) appendStringInfo(buf, "%ld", log_line_number); break; case 'm': - { - struct timeval tv; - pg_time_t stamp_time; - pg_tz *tz; - char msbuf[8]; - - gettimeofday(&tv, NULL); - stamp_time = (pg_time_t) tv.tv_sec; - - /* - * Normally we print log timestamps in log_timezone, but - * during startup we could get here before that's set. If - * so, fall back to gmt_timezone (which guc.c ensures is - * set up before Log_line_prefix can become nonempty). - */ - tz = log_timezone ? log_timezone : gmt_timezone; - - pg_strftime(formatted_log_time, FORMATTED_TS_LEN, - /* leave room for milliseconds... */ - "%Y-%m-%d %H:%M:%S %Z", - pg_localtime(&stamp_time, tz)); - - /* 'paste' milliseconds into place... */ - sprintf(msbuf, ".%03d", (int) (tv.tv_usec / 1000)); - strncpy(formatted_log_time + 19, msbuf, 4); - - appendStringInfoString(buf, formatted_log_time); - } + setup_formatted_log_time(); + appendStringInfoString(buf, formatted_log_time); break; case 't': { @@ -1606,16 +1636,7 @@ log_line_prefix(StringInfo buf) break; case 's': if (formatted_start_time[0] == '\0') - { - pg_time_t stamp_time = (pg_time_t) MyStartTime; - pg_tz *tz; - - tz = log_timezone ? log_timezone : gmt_timezone; - - pg_strftime(formatted_start_time, FORMATTED_TS_LEN, - "%Y-%m-%d %H:%M:%S %Z", - pg_localtime(&stamp_time, tz)); - } + setup_formatted_start_time(); appendStringInfoString(buf, formatted_start_time); break; case 'i': @@ -1731,32 +1752,8 @@ write_csvlog(ErrorData *edata) * to put same timestamp in both syslog and csvlog messages. */ if (formatted_log_time[0] == '\0') - { - struct timeval tv; - pg_time_t stamp_time; - pg_tz *tz; - char msbuf[8]; + setup_formatted_log_time(); - gettimeofday(&tv, NULL); - stamp_time = (pg_time_t) tv.tv_sec; - - /* - * Normally we print log timestamps in log_timezone, but during - * startup we could get here before that's set. If so, fall back to - * gmt_timezone (which guc.c ensures is set up before Log_line_prefix - * can become nonempty). - */ - tz = log_timezone ? log_timezone : gmt_timezone; - - pg_strftime(formatted_log_time, FORMATTED_TS_LEN, - /* leave room for milliseconds... */ - "%Y-%m-%d %H:%M:%S %Z", - pg_localtime(&stamp_time, tz)); - - /* 'paste' milliseconds into place... */ - sprintf(msbuf, ".%03d", (int) (tv.tv_usec / 1000)); - strncpy(formatted_log_time + 19, msbuf, 4); - } appendStringInfoString(&buf, formatted_log_time); appendStringInfoChar(&buf, ','); @@ -1813,14 +1810,7 @@ write_csvlog(ErrorData *edata) /* session start timestamp */ if (formatted_start_time[0] == '\0') - { - pg_time_t stamp_time = (pg_time_t) MyStartTime; - pg_tz *tz = log_timezone ? log_timezone : gmt_timezone; - - pg_strftime(formatted_start_time, FORMATTED_TS_LEN, - "%Y-%m-%d %H:%M:%S %Z", - pg_localtime(&stamp_time, tz)); - } + setup_formatted_start_time(); appendStringInfoString(&buf, formatted_start_time); appendStringInfoChar(&buf, ',');