Thread

  1. 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