From e5203bb283943f666d4c592543837710a6c5518e Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Mon, 2 Oct 2006 17:54:21 +0000 Subject: [PATCH] Add option to logger to rename log files with timestamp (issue #8020 reported by jmls) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44172 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 2 ++ configs/logger.conf.sample | 5 +++ main/logger.c | 64 ++++++++++++++++++++++---------------- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/CHANGES b/CHANGES index 4db3256219..2a9a0ca1a2 100644 --- a/CHANGES +++ b/CHANGES @@ -19,3 +19,5 @@ Changes since Asterisk 1.4-beta was branched: and/or H.450 supplementary service) * Added keepstats option to queues.conf which will keep queue statistics during a reload. + * Added rotatetimestamp option to logger.conf which will use + the time to name the logger files instead of sequence number. diff --git a/configs/logger.conf.sample b/configs/logger.conf.sample index 575d4d8e8d..09099b6a08 100644 --- a/configs/logger.conf.sample +++ b/configs/logger.conf.sample @@ -24,6 +24,11 @@ ; (defaults to queue_log) ;queue_log_name = queue_log ; +; Rename the logfiles using a timestamp instead of a +; sequence number when "logger rotate" is executed +; (defaults to no). +;rotatetimestamp = yes +; ; This determines whether or not we log generic events to a file ; (defaults to yes). ;event_log = no diff --git a/main/logger.c b/main/logger.c index 10534bd6c3..29c4cf48b2 100644 --- a/main/logger.c +++ b/main/logger.c @@ -87,6 +87,7 @@ static char queue_log_name[256] = QUEUELOG; static int filesize_reload_needed = 0; static int global_logmask = -1; +static int rotatetimestamp = 0; static struct { unsigned int queue_log:1; @@ -340,6 +341,8 @@ static void init_logger_chain(void) logfiles.event_log = ast_true(s); if ((s = ast_variable_retrieve(cfg, "general", "queue_log_name"))) ast_copy_string(queue_log_name, s, sizeof(queue_log_name)); + if ((s = ast_variable_retrieve(cfg, "general", "rotatetimestamp"))) + rotatetimestamp = ast_true(s); AST_LIST_LOCK(&logchannels); var = ast_variable_browse(cfg, "logfiles"); @@ -404,16 +407,19 @@ int reload_logger(int rotate) f->fileptr = NULL; if (rotate) { ast_copy_string(old, f->filename, sizeof(old)); - - for (x = 0; ; x++) { - snprintf(new, sizeof(new), "%s.%d", f->filename, x); - myf = fopen((char *)new, "r"); - if (myf) - fclose(myf); - else - break; - } - + + if (!rotatetimestamp) { + for (x = 0; ; x++) { + snprintf(new, sizeof(new), "%s.%d", f->filename, x); + myf = fopen((char *)new, "r"); + if (myf) + fclose(myf); + else + break; + } + } else + snprintf(new, sizeof(new), "%s.%ld", f->filename, (long)time(NULL)); + /* do it */ if (rename(old,new)) fprintf(stderr, "Unable to rename file '%s' to '%s'\n", old, new); @@ -428,14 +434,17 @@ int reload_logger(int rotate) if (logfiles.event_log) { snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG); if (event_rotate) { - for (x=0;;x++) { - snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); - myf = fopen((char *)new, "r"); - if (myf) /* File exists */ - fclose(myf); - else - break; - } + if (!rotatetimestamp) { + for (x=0;;x++) { + snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x); + myf = fopen((char *)new, "r"); + if (myf) /* File exists */ + fclose(myf); + else + break; + } + } else + snprintf(new, sizeof(new), "%s/%s.%ld", (char *)ast_config_AST_LOG_DIR, EVENTLOG,(long)time(NULL)); /* do it */ if (rename(old,new)) @@ -456,15 +465,18 @@ int reload_logger(int rotate) if (logfiles.queue_log) { snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, queue_log_name); if (queue_rotate) { - for (x = 0; ; x++) { - snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, queue_log_name, x); - myf = fopen((char *)new, "r"); - if (myf) /* File exists */ - fclose(myf); - else - break; - } + if (!rotatetimestamp) { + for (x = 0; ; x++) { + snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, queue_log_name, x); + myf = fopen((char *)new, "r"); + if (myf) /* File exists */ + fclose(myf); + else + break; + } + } else + snprintf(new, sizeof(new), "%s/%s.%ld", (char *)ast_config_AST_LOG_DIR, queue_log_name,(long)time(NULL)); /* do it */ if (rename(old, new)) ast_log(LOG_ERROR, "Unable to rename file '%s' to '%s'\n", old, new);