diff --git a/doc/src/sgml/ref/pg_ctl-ref.sgml b/doc/src/sgml/ref/pg_ctl-ref.sgml index 52bcf5e815..23681294b8 100644 --- a/doc/src/sgml/ref/pg_ctl-ref.sgml +++ b/doc/src/sgml/ref/pg_ctl-ref.sgml @@ -419,6 +419,22 @@ PostgreSQL documentation Options for Windows + + + + + Name of the event source for pg_ctl to use + for logging to the event log when running as a Windows service. The + default is PostgreSQL. Note that this only controls + the logging from pg_ctl itself - once + started, the server will use the event source specified + by . Should the server fail during + early startup, it may also log using the default event + source PostgreSQL. + + + + diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 0d92dcd036..32a9663366 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 3a31a75191..6c52db8590 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 9a6ade935f..edd202b7d7 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 6a667812fb..83949c2cda 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 d1f99fbafe..16f7ef9bea 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -154,6 +154,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