Changeset 1088:1d1a20a0779d in freeDiameter for libfdproto/log.c
- Timestamp:
- May 5, 2013, 4:25:27 AM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libfdproto/log.c
r1085 r1088 38 38 #include <stdarg.h> 39 39 40 FILE * fd_g_debug_fstr;41 42 40 pthread_mutex_t fd_log_lock = PTHREAD_MUTEX_INITIALIZER; 43 41 pthread_key_t fd_log_thname; 44 int fd_g_debug_lvl = INFO;42 int fd_g_debug_lvl = FD_LOG_NOTICE; 45 43 46 44 static void fd_internal_logger( int, const char *, va_list ); … … 88 86 89 87 90 static void fd_internal_logger( int loglevel, const char *format, va_list ap )88 static void fd_internal_logger( int printlevel, const char *format, va_list ap ) 91 89 { 92 90 char buf[25]; 93 FILE *fstr = fd_g_debug_fstr ?: stdout; 94 int local_use_color = 0;95 96 /* logging has been decided by macros outside already */91 92 /* Do we need to trace this ? */ 93 if (printlevel < fd_g_debug_lvl) 94 return; 97 95 98 96 /* add timestamp */ 99 fprintf(fstr,"%s ", fd_log_time(NULL, buf, sizeof(buf)));97 printf("%s ", fd_log_time(NULL, buf, sizeof(buf))); 100 98 101 99 /* Use colors on stdout ? */ … … 107 105 } 108 106 109 /* now, this time log, do we use colors? */ 110 if ((fstr == stdout) && (use_colors == 1)) 111 local_use_color = 1; 107 switch(printlevel) { 108 case FD_LOG_ANNOYING: printf("%s A ", (use_colors == 1) ? "\e[0;37m" : ""); break; 109 case FD_LOG_DEBUG: printf("%s DBG ", (use_colors == 1) ? "\e[0;37m" : ""); break; 110 case FD_LOG_NOTICE: printf("%sNOTI ", (use_colors == 1) ? "\e[1;37m" : ""); break; 111 case FD_LOG_ERROR: printf("%sERROR ", (use_colors == 1) ? "\e[0;31m" : ""); break; 112 case FD_LOG_FATAL: printf("%sFATAL! ", (use_colors == 1) ? "\e[0;31m" : ""); break; 113 default: printf("%s ??? ", (use_colors == 1) ? "\e[0;31m" : ""); 114 } 115 vprintf(format, ap); 116 if (use_colors == 1) 117 printf("\e[00m"); 118 printf("\n"); 112 119 113 switch(loglevel) { 114 case FD_LOG_DEBUG: fprintf(fstr, "%s DBG ", local_use_color ? "\e[0;37m" : ""); break; 115 case FD_LOG_NOTICE: fprintf(fstr, "%sNOTI ", local_use_color ? "\e[1;37m" : ""); break; 116 case FD_LOG_ERROR: fprintf(fstr, "%sERROR ", local_use_color ? "\e[0;31m" : ""); break; 117 default: fprintf(fstr, "%s ??? ", local_use_color ? "\e[0;31m" : ""); 118 } 119 vfprintf(fstr, format, ap); 120 if (local_use_color) 121 fprintf(fstr, "\e[00m"); 122 fprintf(fstr, "\n"); 123 124 fflush(fstr); 120 fflush(stdout); 125 121 } 126 122 … … 212 208 213 209 210 static size_t sys_mempagesz = 0; 211 212 static size_t get_mempagesz(void) { 213 if (!sys_mempagesz) { 214 sys_mempagesz = sysconf(_SC_PAGESIZE); /* We alloc buffer by memory pages for efficiency */ 215 if (sys_mempagesz <= 0) 216 sys_mempagesz = 1024; /* default size if above call failed */ 217 } 218 return sys_mempagesz; 219 } 220 221 214 222 /* Helper function for fd_*_dump. Prints the format string from 'offset' into '*buf', extends if needed. The location of buf can be updated by this function. */ 215 223 char * fd_dump_extend(char ** buf, size_t *len, size_t *offset, const char * format, ... ) … … 218 226 int to_write; 219 227 size_t o = 0; 220 static size_t mempagesz = 0; 221 222 if (!mempagesz) { 223 mempagesz = sysconf(_SC_PAGESIZE); /* We alloc buffer by memory pages for efficiency */ 224 if (mempagesz <= 0) 225 mempagesz = 1024; /* default size if above call failed */ 226 } 228 size_t mempagesz = get_mempagesz(); 227 229 228 230 /* we do not TRACE_ENTRY this one on purpose */ … … 258 260 return *buf; 259 261 } 262 263 char * fd_dump_extend_hexdump(char ** buf, size_t *len, size_t *offset, uint8_t *data, size_t datalen, size_t trunc, size_t wrap ) 264 { 265 int truncated = 0; 266 size_t towrite = 0; 267 size_t o = 0; 268 int i; 269 char * p; 270 size_t mempagesz = get_mempagesz(); 271 #define TRUNK_MARK "[...]" 272 273 CHECK_PARAMS_DO(buf && len && data, return NULL); 274 275 if (trunc && (datalen > trunc)) { 276 datalen = trunc; 277 truncated = 1; 278 } 279 280 towrite = datalen * 2; 281 282 if (wrap) 283 towrite += datalen / wrap; /* add 1 '\n' every wrap byte */ 284 285 if (truncated) 286 towrite += CONSTSTRLEN(TRUNK_MARK); 287 288 289 if (offset) 290 o = *offset; 291 292 if (*buf == NULL) { 293 /* Directly allocate the size we need */ 294 *len = (((towrite + o) / mempagesz) + 1 ) * mempagesz; 295 CHECK_MALLOC_DO(*buf = malloc(*len), return NULL); 296 } else if ((towrite + o) >= *len) { 297 /* There is no room in the buffer, we extend and redo */ 298 size_t new_len = (((towrite + o) / mempagesz) + 1) * mempagesz; 299 CHECK_MALLOC_DO(*buf = realloc(*buf, new_len), return NULL); 300 *len = new_len; 301 } 302 303 p = *buf + o; 304 for (i = 0; i < datalen; i++) { 305 sprintf(p, "%2hhX", data[i]); 306 p+=2; 307 if ((wrap) && ((i+1) % wrap == 0)) { 308 *p++='\n'; *p ='\0'; /* we want to ensure the buffer is always 0-terminated */ 309 } 310 } 311 312 if (truncated) 313 memcpy(p, TRUNK_MARK, CONSTSTRLEN(TRUNK_MARK)); 314 315 if (offset) 316 *offset += towrite; 317 318 return *buf; 319 }
Note: See TracChangeset
for help on using the changeset viewer.