Functionality superceeded by log_line_prefix.
Andrew Dunstan
<!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.249 2004/03/12 00:56:00 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.250 2004/03/15 15:56:21 momjian Exp $
-->
<Chapter Id="runtime">
<para>
Causes the duration of every completed statement to be logged.
To use this option, it is recommended that you also enable
- <varname>log_statement</> and <varname>log_pid</> so that you
+ <varname>log_statement</> and if not using <application>syslog</>
+ log the PID using <varname>log_line_prefix</> so that you
can link the statement to the duration using the process
ID. The default is off. Only superusers can turn off this
option if it is enabled by the administrator.
processes without controlling sessions. <application>Syslog</> produces its own
timestamp and process ID information, so you probably do not want to
use those escapes if you are using <application>syslog</>.
+ This option can only be set at server start or in the
+ <filename>postgresql.conf</filename> configuration file.
<informaltable>
<tgroup cols="3">
<thead>
<row>
<entry><literal>%c</literal></entry>
<entry>Session ID. A unique identifier for each session.
- It is 2 4-byte hexadecimal numbers separated by a dot. The numbers
+ It is 2 4-byte hexadecimal numbers (without leading zeros)
+ separated by a dot. The numbers
are the Session Start Time and the Process ID, so this can also
be used as a space saving way of printing these items.</entry>
<entry>Yes</entry>
</listitem>
</varlistentry>
- <varlistentry>
- <term><varname>log_pid</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Prefixes each message in the server log file with the process ID of
- the server process. This is useful to sort out which messages
- pertain to which connection. The default is off. This parameter
- does not affect messages logged via <application>syslog</>, which
- always contain the process ID.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry id="guc-log-statement" xreflabel="log_statement">
<term><varname>log_statement</varname> (<type>boolean</type>)</term>
<listitem>
</listitem>
</varlistentry>
- <varlistentry id="guc-log-timestamp" xreflabel="log_timestamp">
- <term><varname>log_timestamp</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Prefixes each server log message with a time stamp. The default
- is off.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry id="guc-log-hostname" xreflabel="log_hostname">
<term><varname>log_hostname</varname> (<type>boolean</type>)</term>
<listitem>
</listitem>
</varlistentry>
- <varlistentry id="guc-log-source-port" xreflabel="log_source_port">
- <term><varname>log_source_port</varname> (<type>boolean</type>)</term>
- <listitem>
- <para>
- Shows the outgoing port number of the connecting host in the
- connection log messages. You could trace back the port number
- to find out what user initiated the connection. Other than
- that, it's pretty useless and therefore off by default. This
- option can only be set at server start.
- </para>
- </listitem>
- </varlistentry>
-
</variablelist>
</sect3>
</sect2>
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.373 2004/03/10 21:12:46 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.374 2004/03/15 15:56:21 momjian Exp $
*
* NOTES
*
int CheckPointWarning = 30;
time_t LastSignalledCheckpoint = 0;
-bool log_hostname; /* for ps display */
-bool LogSourcePort;
+bool log_hostname; /* for ps display and logging */
bool Log_connections = false;
bool Db_user_namespace = false;
struct timezone tz;
char remote_host[NI_MAXHOST];
char remote_port[NI_MAXSERV];
+ char remote_ps_data[NI_MAXHOST];
IsUnderPostmaster = true; /* we are a postmaster subprocess now */
remote_port, sizeof(remote_port),
NI_NUMERICHOST | NI_NUMERICSERV);
}
+ snprintf(remote_ps_data, sizeof(remote_ps_data),
+ remote_port[0] == '\0' ? "%s" : "%s(%s)",
+ remote_host, remote_port);
if (Log_connections)
ereport(LOG,
(errmsg("connection received: host=%s port=%s",
remote_host, remote_port)));
- if (LogSourcePort)
- {
- /* modify remote_host for use in ps status */
- char tmphost[NI_MAXHOST];
-
- snprintf(tmphost, sizeof(tmphost), "%s(%s)", remote_host, remote_port);
- StrNCpy(remote_host, tmphost, sizeof(remote_host));
- }
-
/*
* save remote_host and remote_port in port stucture
*/
* title for ps. It's good to do this as early as possible in
* startup.
*/
- init_ps_display(port->user_name, port->database_name, remote_host);
+ init_ps_display(port->user_name, port->database_name, remote_ps_data);
set_ps_display("authentication");
/*
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.394 2004/03/09 04:43:07 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.395 2004/03/15 15:56:22 momjian Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
snprintf(dbname, sizeof(dbname)," database=%s",port->database_name);
snprintf(remote_host,sizeof(remote_host)," host=%s",
port->remote_host);
- /* prevent redundant or empty reporting of port */
- if (!LogSourcePort && strlen(port->remote_port))
- snprintf(remote_port,sizeof(remote_port)," port=%s",port->remote_port);
- else
- remote_port[0] = '\0';
+ snprintf(remote_port,sizeof(remote_port)," port=%s",port->remote_port);
gettimeofday(&end,NULL);
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.127 2004/03/09 04:43:07 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.128 2004/03/15 15:56:23 momjian Exp $
*
*-------------------------------------------------------------------------
*/
/* GUC parameters */
PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE;
-bool Log_timestamp = false; /* show timestamps in stderr
- * output */
-bool Log_pid = false; /* show PIDs in stderr output */
char *Log_line_prefix = ""; /* format for extra log line info */
#ifdef HAVE_SYSLOG
static char *expand_fmt_string(const char *fmt, ErrorData *edata);
static const char *useful_strerror(int errnum);
static const char *error_severity(int elevel);
-static const char *print_timestamp(void);
-static const char *print_pid(void);
static void append_with_tabs(StringInfo buf, const char *str);
static const char *log_line_prefix(void);
case 'r':
j += snprintf(result+j,result_len-j,"%s",
MyProcPort->remote_host);
- if (!LogSourcePort && strlen(MyProcPort->remote_port))
+ if (strlen(MyProcPort->remote_port) > 0)
j += snprintf(result+j,result_len-j,"(%s)",
MyProcPort->remote_port);
break;
* Timestamp and PID are only used for stderr output --- we assume
* the syslog daemon will supply them for us in the other case.
*/
- fprintf(stderr, "%s%s%s",
- Log_timestamp ? print_timestamp() : "",
- Log_pid ? print_pid() : "",
- buf.data);
+ fprintf(stderr, "%s",buf.data);
}
pfree(buf.data);
}
-/*
- * Return a timestamp string like
- *
- * "2000-06-04 13:12:03 "
- */
-static const char *
-print_timestamp(void)
-{
- time_t curtime;
- static char buf[21]; /* format `YYYY-MM-DD HH:MM:SS ' */
-
- curtime = time(NULL);
-
- strftime(buf, sizeof(buf),
- "%Y-%m-%d %H:%M:%S ",
- localtime(&curtime));
-
- return buf;
-}
-
-
-/*
- * Return a string like
- *
- * "[123456] "
- *
- * with the current pid.
- */
-static const char *
-print_pid(void)
-{
- static char buf[10]; /* allow `[123456] ' */
-
- snprintf(buf, sizeof(buf), "[%d] ", (int) MyProcPid);
- return buf;
-}
-
/*
* append_with_tabs
*
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.189 2004/03/09 04:43:07 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.190 2004/03/15 15:56:24 momjian Exp $
*
*--------------------------------------------------------------------
*/
&Log_disconnections,
false, NULL, NULL
},
- {
- {"log_timestamp", PGC_SIGHUP, LOGGING_WHAT,
- gettext_noop("Prefixes server log messages with a time stamp."),
- NULL
- },
- &Log_timestamp,
- false, NULL, NULL
- },
- {
- {"log_pid", PGC_SIGHUP, LOGGING_WHAT,
- gettext_noop("Prefixes server log messages with the server PID."),
- NULL
- },
- &Log_pid,
- false, NULL, NULL
- },
#ifdef USE_ASSERT_CHECKING
{
&log_hostname,
false, NULL, NULL
},
- {
- {"log_source_port", PGC_SIGHUP, LOGGING_WHAT,
- gettext_noop("Logs the outgoing port number of the connecting host."),
- NULL
- },
- &LogSourcePort,
- false, NULL, NULL
- },
-
{
{"sql_inheritance", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
gettext_noop("Causes subtables to be included by default in various commands."),
#log_connections = false
#log_disconnections = false
#log_duration = false
-#log_pid = false
#log_line_prefix = '' # e.g. '<%u%%%d> '
# %u=user name %d=database name
# %r=remote host and port
# %x=stop here in non-session processes
# %%='%'
#log_statement = false
-#log_timestamp = false
#log_hostname = false
-#log_source_port = false
#---------------------------------------------------------------------------
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.61 2003/11/29 22:41:14 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/tcop/tcopprot.h,v 1.62 2004/03/15 15:56:27 momjian Exp $
*
* OLD COMMENTS
* This file was created so that other c files could get the two
extern bool InError;
extern CommandDest whereToSendOutput;
extern bool log_hostname;
-extern bool LogSourcePort;
extern DLLIMPORT const char *debug_query_string;
extern char *rendezvous_name;
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.65 2004/03/09 04:43:07 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.66 2004/03/15 15:56:28 momjian Exp $
*
*-------------------------------------------------------------------------
*/
} PGErrorVerbosity;
extern PGErrorVerbosity Log_error_verbosity;
-extern bool Log_timestamp;
-extern bool Log_pid;
extern char *Log_line_prefix;
#ifdef HAVE_SYSLOG