mirror of
https://github.com/postgres/postgres.git
synced 2025-06-25 01:02:05 +03:00
Refactor some duplicate code to set up formatted_log_time and
formatted_start_time.
This commit is contained in:
@ -42,7 +42,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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 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_pipe_chunks(char *data, int len, int dest);
|
||||||
static void write_csvlog(ErrorData *edata);
|
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
|
* errstart --- begin an error-reporting cycle
|
||||||
@ -1481,6 +1483,60 @@ write_eventlog(int level, const char *line)
|
|||||||
}
|
}
|
||||||
#endif /* WIN32 */
|
#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.
|
* 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);
|
appendStringInfo(buf, "%ld", log_line_number);
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
{
|
setup_formatted_log_time();
|
||||||
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);
|
appendStringInfoString(buf, formatted_log_time);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
{
|
{
|
||||||
@ -1606,16 +1636,7 @@ log_line_prefix(StringInfo buf)
|
|||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
if (formatted_start_time[0] == '\0')
|
if (formatted_start_time[0] == '\0')
|
||||||
{
|
setup_formatted_start_time();
|
||||||
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));
|
|
||||||
}
|
|
||||||
appendStringInfoString(buf, formatted_start_time);
|
appendStringInfoString(buf, formatted_start_time);
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
@ -1731,32 +1752,8 @@ write_csvlog(ErrorData *edata)
|
|||||||
* to put same timestamp in both syslog and csvlog messages.
|
* to put same timestamp in both syslog and csvlog messages.
|
||||||
*/
|
*/
|
||||||
if (formatted_log_time[0] == '\0')
|
if (formatted_log_time[0] == '\0')
|
||||||
{
|
setup_formatted_log_time();
|
||||||
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);
|
appendStringInfoString(&buf, formatted_log_time);
|
||||||
appendStringInfoChar(&buf, ',');
|
appendStringInfoChar(&buf, ',');
|
||||||
|
|
||||||
@ -1813,14 +1810,7 @@ write_csvlog(ErrorData *edata)
|
|||||||
|
|
||||||
/* session start timestamp */
|
/* session start timestamp */
|
||||||
if (formatted_start_time[0] == '\0')
|
if (formatted_start_time[0] == '\0')
|
||||||
{
|
setup_formatted_start_time();
|
||||||
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));
|
|
||||||
}
|
|
||||||
appendStringInfoString(&buf, formatted_start_time);
|
appendStringInfoString(&buf, formatted_start_time);
|
||||||
appendStringInfoChar(&buf, ',');
|
appendStringInfoChar(&buf, ',');
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user