[PATCH] Fixed creation of empty .log files during log rotation

From: Арсений Косицын <a(dot)kositsyn(at)postgrespro(dot)ru>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: [PATCH] Fixed creation of empty .log files during log rotation
Date: 2024-10-29 08:08:37
Message-ID: 0acde6ec-7413-4a27-a2be-49897ae67e61@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hi everyone!

A situation has been discovered in which empty .log files are being created.

--Reproduce:

1) You need to set the following parameters in the "postgresql.conf" file:

log_destination = 'csvlog'
logging_collector = on
log_rotation_age = 1min
log_directory = '/home/user/builds/postgresql/log'

2) After starting the server, two files are being created in the
directory with logs:

-rw------- 1 user user  1,4K oct 10 13:29 postgresql-2024-10-10_132907.csv
-rw------- 1 user user  172 oct 10 13:29 postgresql-2024-10-10_132907.log

3) The .log file is created anyway, regardless of the log_destination
parameter.
The following message is displayed in the .log file (due to the fact
that the log_destination
parameter is set = 'csvlog'):
|
|2024-10-10 13:05:52.539 MSK [1629065] LOG:  ending log output to stderr
2024-10-10 13:05:52.539 MSK [1629065] HINT:  Future log output will go
to log destination "csvlog".

Next, the stderr stream is redirected to a .csv file.

4) Now, logs are rotated once a minute (due to the set log_rotation_age
parameter). Moreover, all
open log files are rotated, including the .log file that I wrote about
above. New ones are being created
.csv and .log files. Logs themselves are sent to .csv, and nothing else
is output to .log
and it remains empty:

-rw------- 1 user user 1,4K oct 10 13:29 postgresql-2024-10-10_132907.csv
-rw------- 1 user user  172 oct 10 13:29 postgresql-2024-10-10_132907.log
-rw------- 1 user user 1,4K oct 10 13:30 postgresql-2024-10-10_133000.csv
-rw------- 1 user user    0 oct 10 13:30 postgresql-2024-10-10_133000.log

--Fix:

To correct the situation, you can add a check for the "Log_destination"
parameter in the "logfile_rotate()"
function of the "syslogger.c" module. Then only the logs specified in
this parameter will be rotated.Thisis doneinthe proposedpatch.

Best regards,
Arseny Kositsin.

Attachment Content-Type Size
v1-0001-Fixed-creation-of-an-empty-.log-file.patch text/x-patch 2.1 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2024-10-29 08:20:42 Re: Add isolation test template in injection_points for wait/wakeup/detach
Previous Message Peter Eisentraut 2024-10-29 08:06:32 Remove useless casts to (void *)