[Freeswitch-svn] [commit] r5027 - freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file

Freeswitch SVN anthonyl at freeswitch.org
Fri Apr 27 12:32:16 EDT 2007


Author: anthonyl
Date: Fri Apr 27 12:32:15 2007
New Revision: 5027

Modified:
   freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file/mod_log2file.c

Log:
brushing the dust off this guy, and getting it ready to fly.


Modified: freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file/mod_log2file.c
==============================================================================
--- freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file/mod_log2file.c	(original)
+++ freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file/mod_log2file.c	Fri Apr 27 12:32:15 2007
@@ -34,9 +34,10 @@
 #include <syslog.h>
 
 #define MAX_LENGTH       1024
-#define DEFAULT_FORMAT   "${data}" /* for the most part this contains all that we need by default */
+#define DEFAULT_FORMAT   "${data}" 
 #define DEFAULT_LOGFILE  "/var/log/freeswitch"
 #define DEFAULT_LIMIT    0x7FFFFFFF
+#define WARM_FUZZY_OFFSET 64
 
 static const uint8_t STATIC_LEVELS[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
 static const char modname[] = "mod_log2file";
@@ -85,11 +86,46 @@
 static switch_status_t mod_log2file_rotate(void)
 {
     int fd;
-    int fd2;
+    int ret;
+    unsigned int i;
     unsigned char *p;
+    unsigned char *q;
 
     globals.log_size = 0;
+        
+    ret = fseek(globals.log_fd, 0, SEEK_SET);
+
+    if (ret < 0) {
+        return SWITCH_STATUS_FALSE;
+    }
+    p = malloc(strlen(globals.logfile)+WARM_FUZZY_OFFSET);
+    if (!p) {
+        return SWITCH_STATUS_FALSE;
+    }
+    q = malloc(1024);
+    if (!q) {
+        free(p);
+        return SWITCH_STATUS_FALSE;
+    }
+    memset(p, '\0', strlen(globals.logfile)+WARM_FUZZY_OFFSET);
+    for (i=1;i<MAX_UINT; i++) {
+        sprintf(p, "%s.%i", globals.logfile, i);
+        fd = fopen(p, 'w+');
+        if (fd)
+            break;
+    }
     
+    do {
+        memset(q, '\0', 1024);
+        ret = fread(q, 1024, 1, globals.log_fd);
+        fwrite(q, 1024, 1, fd); 
+        globals.log_size = off;
+    } while(ret);
+
+    ret = fseek(globals.log_fd, 0, SEEK_SET);
+   
+    free(p);
+    free(q);
     return SWITCH_STATUS_SUCCESS;
 }
 
@@ -101,14 +137,11 @@
     if((off = ftello(globals.log_fd)) < 0) {
         return SWITCH_STATUS_FALSE;
     }
-
-    printf("\n****** OFF is %i\n", off);
     
     if (off >= DEFAULT_LIMIT) {
         return mod_log2file_rotate();
     }
     
-    globals.log_size = off;
     return SWITCH_STATUS_SUCCESS;
 }
 
@@ -140,18 +173,24 @@
 	char *message = NULL;
 	char line_no[sizeof(int)*8+1];
 	char date[80] = "";
+    uint8_t *lookup = NULL;
+    switch_log_level_t level = SWITCH_LOG_DEBUG;	
 	switch_time_exp_t time;
 	switch_size_t retsize;
-
+   
 	message = (char *)malloc(strlen(globals.format)+2);
 
+    if (!message) {
+        return SWITCH_STATUS_FALSE;
+    }
 	switch_copy_string(message, globals.format, strlen(globals.format)+1);
-    
+   
     message = switch_string_replace(message, "${data}", node->data);
 	message = switch_string_replace(message, "${message}", node->content);
 	
 	if (switch_time_exp_lt(&time, node->timestamp) != SWITCH_STATUS_SUCCESS) {
-		return SWITCH_STATUS_FALSE;
+        free(message);
+        return SWITCH_STATUS_FALSE;
 	}
 	
 	switch_strftime(date, &retsize, sizeof(date), "%Y-%m-%d %T", &time);
@@ -184,13 +223,12 @@
 			for (param = switch_xml_child(settings, "param"); param; param = param->next) {
 				char *var = (char *) switch_xml_attr_soft(param, "name");
 				char *val = (char *) switch_xml_attr_soft(param, "value");
-
 				if (!strcmp(var, "logfile")) {
 					set_global_logfile(val);
 				} else if (!strcmp(var, "format")) {
-					set_global_format(val);;
-				}
-	
+					set_global_format(val);
+				} 
+  
 			}
 		}
 		switch_xml_free(xml);
@@ -218,14 +256,13 @@
 
     mod_log2file_openlogfile();
 	switch_log_bind_logger(mod_log2file_logger, SWITCH_LOG_DEBUG);
-	
-	return SWITCH_STATUS_SUCCESS;
+    
+   	return SWITCH_STATUS_SUCCESS;
 }
 
 SWITCH_MOD_DECLARE(switch_status_t) switch_module_unload(const switch_loadable_module_interface_t **interface)
 {
-	closelog();
-	
+	closelog();	
 	return SWITCH_STATUS_SUCCESS;
 }
 



More information about the Freeswitch-svn mailing list