Skip site navigation (1) Skip section navigation (2)

Re: BUG #5935: Log lotation not working for default log format

From: Korry Douglas <korry(dot)douglas(at)enterprisedb(dot)com>
To: "Nicholson, Brad (Toronto, ON, CA)" <bnicholson(at)hp(dot)com>
Cc: "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #5935: Log lotation not working for default log format
Date: 2011-03-17 20:52:58
Message-ID: 2704B426-B77B-4DDB-9BC4-82A19F45E0A5@enterprisedb.com (view raw or flat)
Thread:
Lists: pgsql-bugs
> You could appending something onto the logfile to differentiate it, but I can understand why you wouldn't want to as that would change the filename format.
> 
> If this is the case, the call to pg_rotate_logfile() should return false.

pg_rotate_logfile() doesn't actually rotate the log file, it just schedules the rotation to happen as soon as possible.  So it doesn't know whether or not the rotation will actually succeed.  pg_rotate_logfile() only returns FALSE if you haven't started the log collector.

> I'd also say that starting up and allowing a file size based rotation with a log filename that does not allow it to be rotated is also broken.

That filename pattern *does* permit rotation, just no more frequently than every 24 hours.

Consider what would happen if you set log_filename to something like pg_log.%H (where %H is replaced with the hour) and your log size exceeded the log_rotation_size within a given hour - same problem.  

The key is to pick a filename pattern that *can* rotate given the value you set for log_rotation_size.

It might be nice if the logfile naming mechanism supported a new escape sequence that meant "replace me with the next available sequence number... %n might translate to _1, _2, _3, ...).

			-- Korry

P.S. I'm not disagreeing with you, just explaining the code as it exists today.

> 
> Brad.
> 
>> -----Original Message-----
>> From: Korry Douglas [mailto:korry(dot)douglas(at)enterprisedb(dot)com]
>> Sent: Thursday, March 17, 2011 4:00 PM
>> To: Nicholson, Brad (Toronto, ON, CA)
>> Cc: pgsql-bugs(at)postgresql(dot)org
>> Subject: Re: [BUGS] BUG #5935: Log lotation not working for default log
>> format
>> 
>> What would you expect the new log file to be named?  Your log_filename
>> is set to postgresql-%a.log.  The %a part expands to the current day of
>> the week.  If it's Thursday and you already have a file for Thursday,
>> what would the new file name be?
>> 
>> 		-- Korry
>> 
>>> The following bug has been logged online:
>>> 
>>> Bug reference:      5935
>>> Logged by:          Brad Nicholson
>>> Email address:      bnicholson(at)hp(dot)com
>>> PostgreSQL version: 9.0.3
>>> Operating system:   CentOS Release 5.5
>>> Description:        Log lotation not working for default log format
>>> Details:
>>> 
>>> PostgreSQL 9.0.3 on x86_64-unknown-linux-gnu, compiled by GCC gcc
>> (GCC)
>>> 4.1.2 20080704 (Red Hat 4.1.2-48), 64-bit
>>> CentOS release 5.5 (Final)
>>> 
>>> (using the standard PG package)
>>> 
>>> The logfile will not rotate if the log_filename is set to postgresql-
>> %a.log,
>>> which is the default setting after an initdb on my platform.
>>> 
>>> 
>>> I have tested this by setting log_rotation_size and exceeding that
>> threshold
>>> and manually trying to rotate the logs with SELECT
>> pg_rotate_logfile().
>>> Both fail to rotate the log file.
>>> 
>>> 
>>> Manual Rotate:
>>> 
>>> [postgres(at)pg1 pgdata]$ ls -al logs/
>>> total 24
>>> drwxr-xr-x 2 postgres postgres 4096 Mar 17 13:11 .
>>> drwxr-xr-x 4 postgres postgres 4096 Mar 17 13:08 ..
>>> -rw------- 1 postgres postgres  150 Mar 17 13:11 postgresql-Thu.log
>>> [postgres(at)pg1 pgdata]$ psql -p 6432  -c "show log_filename;" postgres
>>>  log_filename
>>> -------------------
>>> postgresql-%a.log
>>> (1 row)
>>> 
>>> [postgres(at)pg1 pgdata]$ psql -p 6432 -c "SELECT pg_rotate_logfile()"
>>> postgres
>>> pg_rotate_logfile
>>> -------------------
>>> t
>>> (1 row)
>>> 
>>> [postgres(at)pg1 pgdata]$ ls -al logs/
>>> total 24
>>> drwxr-xr-x 2 postgres postgres 4096 Mar 17 13:11 .
>>> drwxr-xr-x 4 postgres postgres 4096 Mar 17 13:08 ..
>>> -rw------- 1 postgres postgres  150 Mar 17 13:11 postgresql-Thu.log
>>> 
>>> 
>>> 
>>> Size based automatic rotation:
>>> 
>>> [postgres(at)pg1 pgdata]$ psql -p 6432  -c "show log_rotation_size;"
>> postgres
>>> log_rotation_size
>>> -------------------
>>> 1MB
>>> (1 row)
>>> 
>>> <generate some pgbench traffic with full statement logging>
>>> 
>>> [postgres(at)pg1 pgdata]$ ls -thl logs/
>>> total 3.2M
>>> -rw------- 1 postgres postgres 3.2M Mar 17 13:24 postgresql-Thu.log
>>> 
>>> 
>>> 
>>> If I switch the log_filename to something more specific like
>>> postgresql-%Y-%m-%d_%H_%M_%S.log - the logfile rotates.
>>> 
>>> --
>>> Sent via pgsql-bugs mailing list (pgsql-bugs(at)postgresql(dot)org)
>>> To make changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgsql-bugs
> 

-----------------------------------------------------------------------
Korry Douglas
Senior Database Dude
EnterpriseDB Corporation
The Enterprise PostgreSQL Company

Phone: (804)241-4301
Mobile: (620) EDB-NERD



In response to

pgsql-bugs by date

Next:From: Yura SokolovDate: 2011-03-18 08:22:11
Subject: Setting timezone: is it bug or intended?
Previous:From: Nicholson, Brad (Toronto, ON, CA)Date: 2011-03-17 20:16:13
Subject: Re: BUG #5935: Log lotation not working for default log format

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group