if (written >= MAXCMDLEN)
        pg_log(PG_FATAL, "command too long\n");
 
-   if ((log = fopen_priv(log_file, "a+")) == NULL)
+   if ((log = fopen_priv(log_file, "a")) == NULL)
        pg_log(PG_FATAL, "cannot write to log file %s\n", log_file);
+#ifdef WIN32
+   fprintf(log, "\n\n");
+#endif
    pg_log(PG_VERBOSE, "%s\n", cmd);
    fprintf(log, "command: %s\n", cmd);
 
 
 #ifndef WIN32
    /* 
-    * Can't do this on Windows, postmaster will still hold the log file
-    * open if the command was "pg_ctl start".
+    *  We can't do this on Windows because it will keep the "pg_ctl start"
+    *  output filename open until the server stops, so we do the \n\n above
+    *  on that platform.  We use a unique filename for "pg_ctl start" that is
+    *  never reused while the server is running, so it works fine.  We could
+    *  log these commands to a third file, but that just adds complexity.
     */
-   if ((log = fopen_priv(log_file, "a+")) == NULL)
+   if ((log = fopen_priv(log_file, "a")) == NULL)
        pg_log(PG_FATAL, "cannot write to log file %s\n", log_file);
    fprintf(log, "\n\n");
    fclose(log);
 
 #define SERVER_STOP_LOG_FILE   SERVER_LOG_FILE
 #else
 #define SERVER_START_LOG_FILE  "pg_upgrade_server_start.log"
-/* pg_ctl stop doesn't keep the log file open, so reuse UTILITY_LOG_FILE */
+/*
+ * "pg_ctl start" keeps SERVER_START_LOG_FILE and SERVER_LOG_FILE open
+ * while the server is running, so we use UTILITY_LOG_FILE for "pg_ctl
+ * stop".
+ */
 #define SERVER_STOP_LOG_FILE   UTILITY_LOG_FILE
 #endif