Thread
-
Re: [Proposal] Adding Log File Capability to pg_createsubscriber
vignesh C <vignesh21@gmail.com> — 2025-12-29T11:10:46Z
On Wed, 24 Dec 2025 at 04:52, Gyan Sreejith <gyan.sreejith@gmail.com> wrote: > > Thank you for the feedback everybody. As I read through this email chain, I found differing opinions on how logging should be implemented. This ambiguity leaves me unsure as to which solution(s) to pursue. As of right now, I have attached the git-format patch like Hayato Kuroda recommended (but it does not have any new changes). I am willing to implement whatever solution when we reach a consensus. Few comments: 1) The file permissions are 664 for pg_createsubscriber_internal.log, pg_createsubscriber_resetwal.log but 600 for pg_createsubscriber_server.log. The permissions should be the same for all the files. ... if (opt->log_dir != NULL) out_file = psprintf("%s/pg_createsubscriber_resetwal.log", opt->log_dir); else out_file = DEVNULL; cmd_str = psprintf("\"%s\" -D \"%s\" > \"%s\"", pg_resetwal_path, subscriber_dir, out_file); pg_log_debug("pg_resetwal command is: %s", cmd_str); ... ... if (opt->log_dir != NULL) { appendPQExpBuffer(pg_ctl_cmd, " -l %s/pg_createsubscriber_server.log", opt->log_dir); } pg_log_debug("pg_ctl command is: %s", pg_ctl_cmd->data); rc = system(pg_ctl_cmd->data); ... 2) Can you gracefully handle the case where permissions are not enough in the directory and throw proper error: if (stat(opt.log_dir, &statbuf) != 0) { if (errno == ENOENT) { mkdir(opt.log_dir, S_IRWXU); pg_log_info("log directory created"); } else pg_fatal("could not access directory \"%s\": %m", opt.log_dir); } 3) Currently there is no timestamp included for pg_createsubscriber_internal and pg_createsubscriber_resetwal log file contents. Without that it is difficult to tell when the operations were done. It will be good to include them. 4) The patch does not apply on the head, kindly rebase on top of head. 5) Do you need to open and close the log file each time? ... if (internal_log_file != NULL) { if ((fp = fopen(internal_log_file, "a")) == NULL) pg_fatal("could not write to log file \"%s\": %m", internal_log_file); fprintf(fp, "checking settings on subscriber\n"); fclose(fp); } else pg_log_info("checking settings on subscriber"); ... ... if (internal_log_file != NULL) { if ((fp = fopen(internal_log_file, "a")) == NULL) pg_fatal("could not write to log file \"%s\": %m", internal_log_file); fprintf(fp, "checking settings on publisher\n"); fclose(fp); } else pg_log_info("checking settings on publisher"); ... Regards, Vignesh