aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2014-07-17 12:42:08 +0200
committerMagnus Hagander <magnus@hagander.net>2014-07-17 12:42:08 +0200
commitc0e4520b1667279389bb0dce8d867df2ac25042a (patch)
treedb6dba94baef69091117f0e32b32dd85f620fb95 /src
parentaa688725615a4fb55c460f072fb144900a59582d (diff)
downloadpostgresql-c0e4520b1667279389bb0dce8d867df2ac25042a.tar.gz
postgresql-c0e4520b1667279389bb0dce8d867df2ac25042a.zip
Add option to pg_ctl to choose event source for logging
pg_ctl will log to the Windows event log when it is running as a service, which is the primary way of running PostgreSQL on Windows. This option makes it possible to specify which event source to use for this, in order to separate different instances. The server logging itself is still controlled by the regular logging parameters, including a separate setting for the event source. The parameter to pg_ctl only controlls the logging from pg_ctl itself. MauMau, review in many iterations by Amit Kapila and me.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/error/elog.c3
-rw-r--r--src/backend/utils/misc/guc.c2
-rw-r--r--src/bin/pg_ctl/pg_ctl.c16
-rw-r--r--src/bin/pgevent/pgevent.c2
-rw-r--r--src/include/pg_config_manual.h5
5 files changed, 23 insertions, 5 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 0d92dcd036c..32a9663366d 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -1989,7 +1989,8 @@ write_eventlog(int level, const char *line, int len)
if (evtHandle == INVALID_HANDLE_VALUE)
{
- evtHandle = RegisterEventSource(NULL, event_source ? event_source : "PostgreSQL");
+ evtHandle = RegisterEventSource(NULL,
+ event_source ? event_source : DEFAULT_EVENT_SOURCE);
if (evtHandle == NULL)
{
evtHandle = INVALID_HANDLE_VALUE;
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 3a31a751919..6c52db85903 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -3019,7 +3019,7 @@ static struct config_string ConfigureNamesString[] =
NULL
},
&event_source,
- "PostgreSQL",
+ DEFAULT_EVENT_SOURCE,
NULL, NULL, NULL
},
diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index 9a6ade935f8..edd202b7d7f 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -89,6 +89,7 @@ static char *post_opts = NULL;
static const char *progname;
static char *log_file = NULL;
static char *exec_path = NULL;
+static char *event_source = NULL;
static char *register_servicename = "PostgreSQL"; /* FIXME: + version ID? */
static char *register_username = NULL;
static char *register_password = NULL;
@@ -178,7 +179,8 @@ write_eventlog(int level, const char *line)
if (evtHandle == INVALID_HANDLE_VALUE)
{
- evtHandle = RegisterEventSource(NULL, "PostgreSQL");
+ evtHandle = RegisterEventSource(NULL,
+ event_source ? event_source : DEFAULT_EVENT_SOURCE);
if (evtHandle == NULL)
{
evtHandle = INVALID_HANDLE_VALUE;
@@ -1406,6 +1408,9 @@ pgwin32_CommandLine(bool registration)
free(dataDir);
}
+ if (registration && event_source != NULL)
+ appendPQExpBuffer(cmdLine, " -e \"%s\"", event_source);
+
if (registration && do_wait)
appendPQExpBuffer(cmdLine, " -w");
@@ -1878,6 +1883,10 @@ do_help(void)
printf(_("\nCommon options:\n"));
printf(_(" -D, --pgdata=DATADIR location of the database storage area\n"));
printf(_(" -s, --silent only print errors, no informational messages\n"));
+#if defined(WIN32) || defined(__CYGWIN__)
+ printf(_(" -e SOURCE event source to use for logging when running\n"
+ " as a service\n"));
+#endif
printf(_(" -t, --timeout=SECS seconds to wait when using -w option\n"));
printf(_(" -V, --version output version information, then exit\n"));
printf(_(" -w wait until operation completes\n"));
@@ -2140,7 +2149,7 @@ main(int argc, char **argv)
/* process command-line options */
while (optind < argc)
{
- while ((c = getopt_long(argc, argv, "cD:l:m:N:o:p:P:sS:t:U:wW", long_options, &option_index)) != -1)
+ while ((c = getopt_long(argc, argv, "cD:e:l:m:N:o:p:P:sS:t:U:wW", long_options, &option_index)) != -1)
{
switch (c)
{
@@ -2168,6 +2177,9 @@ main(int argc, char **argv)
case 'm':
set_mode(optarg);
break;
+ case 'e':
+ event_source = pg_strdup(optarg);
+ break;
case 'N':
register_servicename = pg_strdup(optarg);
break;
diff --git a/src/bin/pgevent/pgevent.c b/src/bin/pgevent/pgevent.c
index 6a667812fba..83949c2cda2 100644
--- a/src/bin/pgevent/pgevent.c
+++ b/src/bin/pgevent/pgevent.c
@@ -26,7 +26,7 @@ HANDLE g_module = NULL; /* hModule of DLL */
* The maximum length of a registry key is 255 characters.
* http://msdn.microsoft.com/en-us/library/ms724872(v=vs.85).aspx
*/
-char event_source[256] = "PostgreSQL";
+char event_source[256] = DEFAULT_EVENT_SOURCE;
/* Prototypes */
HRESULT DllInstall(BOOL bInstall, LPCWSTR pszCmdLine);
diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h
index d1f99fbafef..16f7ef9bea6 100644
--- a/src/include/pg_config_manual.h
+++ b/src/include/pg_config_manual.h
@@ -155,6 +155,11 @@
#define DEFAULT_PGSOCKET_DIR "/tmp"
/*
+ * This is the default event source for Windows event log.
+ */
+#define DEFAULT_EVENT_SOURCE "PostgreSQL"
+
+/*
* The random() function is expected to yield values between 0 and
* MAX_RANDOM_VALUE. Currently, all known implementations yield
* 0..2^31-1, so we just hardwire this constant. We could do a