[Freeswitch-svn] [commit] r5027 - freeswitch/branches/anthonyl/fs-branch/src/mod/loggers/mod_log2file
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; }
participants (1)
-
Freeswitch SVN