Re: BUG #7559: syslogger doesn't close stdout and stderr

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Reinhard Max <reinhard(at)m4x(dot)de>
Cc: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #7559: syslogger doesn't close stdout and stderr
Date: 2012-09-20 16:23:07
Message-ID: 24042.1348158187@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Reinhard Max <reinhard(at)m4x(dot)de> writes:
> On Thu, 20 Sep 2012 at 11:06, Tom Lane wrote:
>> Well, I would have no objection to changing pg_ctl so that it
>> redirects the postmaster's stdout/stderr when a -l switch is given
>> (actually, I thought it did that already...).

> Well, going that route forces me to either introduce yet another log
> file for the user to look into when something goes wrong with
> PostgreSQL, or to suppress that information completely (when using -l
> /dev/null). I think it is common practice for daemons to report early
> errors to stderr (so that the user starting the serivice gets to see
> them on the terminal) and after successfull startup redirect to
> /dev/null and log to syslog or their own logging mechanism.

Well, at least in the Fedora/RHEL packages I had such an additional log
file for years. Printing complaints to "the terminal" turns out to not
be tremendously useful in service start scripts, because even if there's
somebody watching the console during boot, the info tends to fly
offscreen pretty quick. (systemd finally improved that by connecting
services' stdout/stderr to syslog by default --- but it's still not
going to the user's screen.)

>> I do object to changing the logger's behavior as you suggest,
>> because that will break use-cases that work today. One that I've
>> used personally is adding "fprintf(stderr)" calls in the logger for
>> debugging the logger itself.

> Do you also have use cases in mind that are relevant for end users of
> PostgreSQL who never even look into the source code?

Sure. Under systemd the logger's stderr will go to /var/log/messages.
Admittedly, it shouldn't ever print anything there during normal
operation, but we don't have control over all the code in the process.
For instance, if glibc were to detect malloc-arena corruption, its
complaints about that would end up in /var/log/messages. Under your
proposal they'd end up in /dev/null.

regards, tom lane

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Mayank Mittal 2012-09-20 16:44:42 Re: BUG #7562: could not read block 0 in file "base/16385/16585": read only 0 of 8192 bytes
Previous Message mayank.mittal.1982 2012-09-20 16:15:11 BUG #7562: could not read block 0 in file "base/16385/16585": read only 0 of 8192 bytes