Add option to logger to rename log files with timestamp (issue #8020 reported by...
authorJoshua Colp <jcolp@digium.com>
Mon, 2 Oct 2006 17:54:21 +0000 (17:54 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 2 Oct 2006 17:54:21 +0000 (17:54 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@44172 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
configs/logger.conf.sample
main/logger.c

diff --git a/CHANGES b/CHANGES
index 4db3256..2a9a0ca 100644 (file)
--- 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.
index 575d4d8..09099b6 100644 (file)
 ; (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
index 10534bd..29c4cf4 100644 (file)
@@ -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);