log.c (1937B)
1 /* 2 * MySmartUSB MK3 Interface 3 * 4 * @copyright: Copyright (c) 2012, Dominik Schmidt 5 * @author: Dominik Schmidt <das1993@hotmail.com> 6 * @version: 0.0.0 7 * @license: CC-BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/) 8 * 9 */ 10 #include <log.h> 11 #include <stdio.h> 12 #include <errno.h> 13 #include <stdlib.h> 14 #include <string.h> 15 #include <option.h> 16 char LOG_LEVEL_names[LOG_LEVEL_COUNT][8]={"DEBUG","INFO","WARNING","ERROR","FATAL"}; 17 void log_string(char *str, unsigned short int level, char *force_color){ 18 FILE *stream; 19 if(level>=LOG_LEVEL_WARNING&&level!=LOG_LEVEL_COUNT){ 20 stream=stderr; 21 } 22 else{ 23 stream=stdout; 24 } 25 char *color=(force_color==NULL) ? "" : force_color; 26 char *reset_color="\e[0m"; 27 if(configuration.color&&force_color==NULL){ 28 switch(level){ 29 case LOG_LEVEL_DEBUG: 30 color="\e[2;37;40m"; 31 break; 32 case LOG_LEVEL_INFO: 33 color="\e[0;37;40m"; 34 break; 35 case LOG_LEVEL_WARNING: 36 color="\e[1;33;40m"; 37 break; 38 case LOG_LEVEL_ERROR: 39 color="\e[1;31;40m"; 40 break; 41 case LOG_LEVEL_FATAL: 42 color="\e[1;33;41m"; 43 break; 44 } 45 } 46 if((configuration.log_level>LOG_LEVEL_FATAL) ? LOG_LEVEL_FATAL : configuration.log_level<=level){ 47 fprintf(stream,"%s%s%s\n",color, str, reset_color); 48 } 49 } 50 void do_log(char *src, char *msg, unsigned short int level, unsigned short int type){ 51 int error=errno; 52 char success_color[]="\e[1;32m"; 53 char *force_color=NULL; 54 if(type==LOG_TYPE_SUCCESS){ 55 level=LOG_LEVEL_COUNT; 56 force_color=success_color; 57 } 58 char *str=malloc(strlen("%s[%s]: %s (%s)")+strlen(src)+strlen(msg)+strlen(LOG_LEVEL_names[level])+strlen(strerror(error))); 59 if(type==LOG_TYPE_SIGNAL){ 60 sprintf(str,"%s[%s]: %s (%s)",LOG_LEVEL_names[level],src,msg,strerror(error)); 61 } 62 else if(type==LOG_TYPE_RESULT){ 63 level=LOG_LEVEL_COUNT; 64 sprintf(str,"%s",msg); 65 } 66 else{ 67 sprintf(str,"%s[%s]: %s",LOG_LEVEL_names[level],src,msg); 68 } 69 log_string(str,level, force_color); 70 free(str); 71 }