mirror of
https://github.com/postgres/postgres.git
synced 2025-04-20 00:42:27 +03:00
Add local-address escape "%L" to log_line_prefix.
This escape shows the numeric server IP address that the client has connected to. Unix-socket connections will show "[local]". Non-client processes (e.g. background processes) will show "[none]". We expect that this option will be of interest to only a fairly small number of users. Therefore the implementation is optimized for the case where it's not used (that is, we don't do the string conversion until we have to), and we've not added the field to csvlog or jsonlog formats. Author: Greg Sabino Mullane <htamfids@gmail.com> Reviewed-by: Cary Huang <cary.huang@highgo.ca> Reviewed-by: David Steele <david@pgmasters.net> Reviewed-by: Jim Jones <jim.jones@uni-muenster.de> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/CAKAnmmK-U+UicE-qbNU23K--Q5XTLdM6bj+gbkZBZkjyjrd3Ow@mail.gmail.com
This commit is contained in:
parent
8f5e419484
commit
3516ea768c
@ -7689,6 +7689,12 @@ local0.* /var/log/postgresql
|
|||||||
<entry>Remote host name or IP address</entry>
|
<entry>Remote host name or IP address</entry>
|
||||||
<entry>yes</entry>
|
<entry>yes</entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><literal>%L</literal></entry>
|
||||||
|
<entry>Local address (the IP address on the server that the
|
||||||
|
client connected to)</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry><literal>%b</literal></entry>
|
<entry><literal>%b</literal></entry>
|
||||||
<entry>Backend type</entry>
|
<entry>Backend type</entry>
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "access/xact.h"
|
#include "access/xact.h"
|
||||||
|
#include "common/ip.h"
|
||||||
#include "libpq/libpq.h"
|
#include "libpq/libpq.h"
|
||||||
#include "libpq/pqformat.h"
|
#include "libpq/pqformat.h"
|
||||||
#include "mb/pg_wchar.h"
|
#include "mb/pg_wchar.h"
|
||||||
@ -3084,6 +3085,38 @@ log_status_format(StringInfo buf, const char *format, ErrorData *edata)
|
|||||||
appendStringInfoSpaces(buf,
|
appendStringInfoSpaces(buf,
|
||||||
padding > 0 ? padding : -padding);
|
padding > 0 ? padding : -padding);
|
||||||
break;
|
break;
|
||||||
|
case 'L':
|
||||||
|
{
|
||||||
|
const char *local_host;
|
||||||
|
|
||||||
|
if (MyProcPort)
|
||||||
|
{
|
||||||
|
if (MyProcPort->local_host[0] == '\0')
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* First time through: cache the lookup, since it
|
||||||
|
* might not have trivial cost.
|
||||||
|
*/
|
||||||
|
(void) pg_getnameinfo_all(&MyProcPort->laddr.addr,
|
||||||
|
MyProcPort->laddr.salen,
|
||||||
|
MyProcPort->local_host,
|
||||||
|
sizeof(MyProcPort->local_host),
|
||||||
|
NULL, 0,
|
||||||
|
NI_NUMERICHOST | NI_NUMERICSERV);
|
||||||
|
}
|
||||||
|
local_host = MyProcPort->local_host;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Background process, or connection not yet made */
|
||||||
|
local_host = "[none]";
|
||||||
|
}
|
||||||
|
if (padding != 0)
|
||||||
|
appendStringInfo(buf, "%*s", padding, local_host);
|
||||||
|
else
|
||||||
|
appendStringInfoString(buf, local_host);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
if (MyProcPort && MyProcPort->remote_host)
|
if (MyProcPort && MyProcPort->remote_host)
|
||||||
{
|
{
|
||||||
|
@ -604,6 +604,7 @@
|
|||||||
# %d = database name
|
# %d = database name
|
||||||
# %r = remote host and port
|
# %r = remote host and port
|
||||||
# %h = remote host
|
# %h = remote host
|
||||||
|
# %L = local address
|
||||||
# %b = backend type
|
# %b = backend type
|
||||||
# %p = process ID
|
# %p = process ID
|
||||||
# %P = process ID of parallel group leader
|
# %P = process ID of parallel group leader
|
||||||
|
@ -139,6 +139,9 @@ typedef struct Port
|
|||||||
int remote_hostname_errcode; /* see above */
|
int remote_hostname_errcode; /* see above */
|
||||||
char *remote_port; /* text rep of remote port */
|
char *remote_port; /* text rep of remote port */
|
||||||
|
|
||||||
|
/* local_host is filled only if needed (see log_status_format) */
|
||||||
|
char local_host[64]; /* ip addr of local socket for client conn */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Information that needs to be saved from the startup packet and passed
|
* Information that needs to be saved from the startup packet and passed
|
||||||
* into backend execution. "char *" fields are NULL if not set.
|
* into backend execution. "char *" fields are NULL if not set.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user