From 1a6ee7a320f26bce2be2b924e7b6a05237348921 Mon Sep 17 00:00:00 2001 From: Arthur Zakirov Date: Fri, 28 Apr 2017 12:01:47 +0300 Subject: [PATCH] Rotation by size works --- utils/logger.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/utils/logger.c b/utils/logger.c index e76a1927..5a7df6f8 100644 --- a/utils/logger.c +++ b/utils/logger.c @@ -329,9 +329,33 @@ static void open_logfile(FILE **file, const char *filename_format) { char *filename; + struct stat st; + bool rotation_requested = false; filename = logfile_getname(filename_format, time(NULL)); - *file = logfile_open(filename, "a"); + + /* First check for rotation by size */ + if (log_rotation_size > 0) + { + if (stat(filename, &st) == -1) + { + if (errno == ENOENT) + { + /* There is no file "filename" and rotation does not need */ + } + else + elog(ERROR, "cannot stat log file \"%s\": %s", + filename, strerror(errno)); + } + /* Found log file "filename" */ + else + rotation_requested = (st.st_size >= log_rotation_size * 1024L); + } + + if (rotation_requested) + *file = logfile_open(filename, "w"); + else + *file = logfile_open(filename, "a"); pfree(filename); /*