Re(2): Postgres/Postmaster logging and log rotation - Mailing list pgsql-admin

From pgsql-admin
Subject Re(2): Postgres/Postmaster logging and log rotation
Date
Msg-id fc.000f567200a25ab5000f567200a25ab5.a25ae7@fc.emc.com.ph
Whole thread Raw
Responses Re(3): Postgres/Postmaster logging and log rotation  ("Sherwin Daganato" <win@email.com.ph>)
List pgsql-admin
peter_e@gmx.net writes:
>William L James writes:
>
>> script - su -l postgresql -c "/usr/bin/pg_ctl -D $PGDATA -p
>> /usr/bin/postmaster start >>/var/log/postgresql 2>&1"), but
>> when the weekly logrotate.d function kicks in, Postgres logging
>> stops.
>
>The logging probably continues to go to the rotated-away file.  The
>typical log rotation cron job presumes that the daemons close the log
>files periodically.  This is not the case with PostgreSQL.  A good
>solution is to pipe your log output to a small program that does the log
>rotating (or simply closes the log file once in a while), like rotatelogs
>from Apache.

I also have this problem in our Posgresql 6.5.3 (too old) server.
Actually we have already migrated to 7.0.3 but there are still programs
that uses the old one.

In 7.0.3, it was no problem. I just set pg_option to
   verbose=2
   query=2
   syslog=1
and added
    local0.*                                        /var/log/postgresql
in syslog.conf.

In 6.5.3, I tried your suggestion.
I put this in /etc/rc.d/init.d/postgresql:
 su -l postgres -c '/usr/bin/postmaster -B 2048 -o "-S 1024" -i -D
/var/lib/pgsql -d 2 | /root/logger.pl >/dev/null 2>&1 &'
and added
    local0.*                                        /var/log/postgresql
in syslog.conf.

It is working but aside from writing to /var/log/postgresql it is also
writing to the console where the portmaster was started.
And what I can't  understand is that what was written in the console is
different from the log file.
The writings to the console was something like this:

% (/dev/pts/4) /etc/rc.d/init.d/postgresql restart
Stopping postgresql service:                               [  OK  ]
Checking postgresql installation: looks good!
Starting postgresql service: FindExec: found "/usr/bin/postgres" using
argv[0]
binding ShmemCreate(key=52e2c1, size=17994752)
postmaster [25489]
/usr/bin/postmaster: ServerLoop:         handling reading 5
/usr/bin/postmaster: ServerLoop:                handling reading 5
/usr/bin/postmaster: ServerLoop:                handling writing 5
/usr/bin/postmaster: BackendStartup: pid 25530 user root db testing socket
5
/usr/bin/postmaster child[25530]: starting with (/usr/bin/postgres -d2 -B
2048 -S 1024 -v131072 -p testing )

and in /var/log/postgresql was something like this:

Mar  8 21:08:36 tae postgres[27378]: StartTransactionCommand
Mar  8 21:08:36 tae postgres[27378]: query: SELECT * FROM office
Mar  8 21:08:36 tae postgres[27378]: ProcessQuery
Mar  8 21:08:36 tae postgres[27378]: CommitTransactionCommand
Mar  8 21:08:36 tae postgres[27378]: proc_exit(0) [#0]
Mar  8 21:08:36 tae postgres[27378]: shmem_exit(0) [#0]
Mar  8 21:08:36 tae postgres[27378]: exit(0)

Can anybody tell me what's going on here? Thanks.

Anyway here's the logger.pl (taken from Cute tricks with Perl & Apache)
   note: I forgot the whole url where I got it and I also modified it a
little bit

#!/usr/bin/perl
use Sys::Syslog;

$SERVER_NAME = shift || 'postgres';
$FACILITY = 'local0';
$PRIORITY = 'debug';

Sys::Syslog::setlogsock('unix');
openlog ($SERVER_NAME,'ndelay,pid',$FACILITY);
while (<>) {
  chomp;
  syslog($PRIORITY,$_);
}
closelog;


pgsql-admin by date:

Previous
From: Colleen Williams
Date:
Subject: freeing disk space used by postgresql/postmaster
Next
From: Tom Lane
Date:
Subject: Re: freeing disk space used by postgresql/postmaster