Re: [HACKERS] Syslog and pg_options (for RPMs)

From: Massimo Dal Zotto <dz(at)cs(dot)unitn(dot)it>
To: Lamar Owen <lamar(dot)owen(at)wgcr(dot)org>
Subject: Re: [HACKERS] Syslog and pg_options (for RPMs)
Date: 2000-02-28 18:45:41
Message-ID: 200002291807.TAA32410@nikita.dz.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> Well, I got pg_options and syslog (and ELOG timestamping) figured out --
> however, there is a quirk:
>
> With syslog set to 2 (supposedly suppressing ANY stderr/stdout, I still get
> some output (I know that the documentation mentions this) )-- the output I am
> getting is "reset_client_encoding()..
> reset_client_encoding() done" immediately after a InitPostgres
> log line. Incidentally, the two reset_client_encoding lines are not
> timestamped, while the InitPostgres line IS.

It seems that there is some code which doesn't use elog() or TPRINTF() but
outputs directly to stderr instead. For example in postgres.c:

#ifdef MULTIBYTE
/* set default client encoding */
if (Verbose)
puts("\treset_client_encoding()..");
reset_client_encoding();
if (Verbose)
puts("\treset_client_encoding() done.");
#endif

In my opinion this is wrong. It should be:

TPRINTF(TRACE_VERBOSE, "reset_client_encoding().."");

or better:

TPRINTF(TRACE_MULTYBYTE, "reset_client_encoding().."");

A quick grep shows that the following files contain puts()

src/backend/access/common/printtup.c:
src/backend/bootstrap/bootparse.c:
src/backend/bootstrap/bootstrap.c:
src/backend/executor/execAmi.c:
src/backend/libpq/be-dumpdata.c:
src/backend/nodes/copyfuncs.c:
src/backend/parser/parse_expr.c:
src/backend/tcop/postgres.c:
src/backend/utils/adt/dt.c:
src/backend/utils/adt/ruleutils.c:
src/backend/utils/init/postinit.c:
src/backend/utils/misc/database.c:
src/backend/utils/sort/lselect.c:
src/bin/psql/psql.c:
src/interfaces/libpgtcl/pgtclId.c:

and many other files contain printf().

> To get syslog functionality working (at least under RedHat Linux 6.1/Intel), do
> the following:
>
> Either edit src/include/config.h.in before configure, or edit
> src/include/config.h after configure but before make (for RPM-building, I patch
> config.h.in before running configure) -- uncomment both ELOG_TIMESTAMPS and
> USE_SYSLOG.

You can also add the following line into Makefile.custom:

CUSTOM_COPT += -DUSE_SYSLOG -DELOG_TIMESTAMPS

> In $PGDATA/pg_options, make verbose=1 or 2, and syslog >0 -- read the
> pg_options page in the admin docs for more stuff you can put in pg_options.
>
> To get information into the syslog, in /etc/syslog.conf place a line:
> local0.* /var/log/postgresql
> and /var/log/postgresql will get ALL those messages. NICE. Log rotation under
> RedHat is a simple config file in /etc/logrotate.d......
>
> These changes (including the syslog.conf one) will be in the next RPM
> set to be released.
>
> Massimo, what syslog levels are you using (I've perused
> src/backend/misc/trace.c, but, unfortunately, my knowledge of syslog code is
> weak)?

LOG_DEBUG, unless you enable the "all" trace flag, in which case LOG_INFO
is used.

> Man, those regression tests really issue the queries (normally, my system will
> do the non-parallel regression in about 2:15, but with syslog and query=4, it
> takes 3:14).
>
> --
> Lamar Owen
> WGCR Internet Radio
> 1 Peter 4:11
>
> ************
>

--
Massimo Dal Zotto

+----------------------------------------------------------------------+
| Massimo Dal Zotto email: dz(at)cs(dot)unitn(dot)it |
| Via Marconi, 141 phone: ++39-0461534251 |
| 38057 Pergine Valsugana (TN) www: http://www.cs.unitn.it/~dz/ |
| Italy pgp: finger dz(at)tango(dot)cs(dot)unitn(dot)it |
+----------------------------------------------------------------------+

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Jan Wieck 2000-02-28 22:18:34 NOT {NULL|DEFERRABLE} (was: bug in 7.0)
Previous Message Keith G. Murphy 2000-02-28 16:44:29 Re: [GENERAL] Re: [HACKERS] TRANSACTIONS