Re: [HACKERS] Syslog and pg_options (for RPMs) - Mailing list pgsql-hackers

From Massimo Dal Zotto
Subject Re: [HACKERS] Syslog and pg_options (for RPMs)
Date
Msg-id 200002291807.TAA32410@nikita.dz.net
Whole thread Raw
In response to Syslog and pg_options (for RPMs)  (Lamar Owen <lamar.owen@wgcr.org>)
List 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@cs.unitn.it               |
|  Via Marconi, 141                phone: ++39-0461534251              |
|  38057 Pergine Valsugana (TN)      www: http://www.cs.unitn.it/~dz/  |
|  Italy                             pgp: finger dz@tango.cs.unitn.it  |
+----------------------------------------------------------------------+



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: [HACKERS] Re: NOT {NULL|DEFERRABLE} (was: bug in 7.0)
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] having and union in v7beta