Log.h (1721B)
1 #pragma once 2 #define WIDEN2(x) # x 3 #define WIDEN(x) WIDEN2(x) 4 5 #define LOG_COMPOSE_SRC (const struct log_source){.file={.v=__FILE__, .l=sizeof(__FILE__)}, .line={.v=WIDEN(__LINE__), .l=sizeof(WIDEN(__LINE__))}, .func={.v=__func__, .l=sizeof(__func__)}} 6 7 #include <string.h> 8 #include <EGong/Util/Config.h> 9 struct log_source_string{ 10 const char *v; 11 unsigned int l; 12 }; 13 struct log_source{ 14 struct log_source_string file; 15 struct log_source_string line; 16 struct log_source_string func; 17 }; 18 enum LOG_LEVELS{ 19 LOG_LEVEL_DEBUG, 20 LOG_LEVEL_INFO, 21 LOG_LEVEL_WARNING, 22 LOG_LEVEL_ERROR, 23 LOG_LEVEL_FATAL, 24 LOG_LEVEL_COUNT 25 }; 26 enum LOG_DESTINATIONS{ 27 LOG_DEST_STDIO=(1<<0), 28 LOG_DEST_FILE=(1<<1), 29 LOG_DEST_GTK=(1<<2) 30 }; 31 enum LOG_TYPES{ 32 LOG_TYPE_NORMAL, 33 LOG_TYPE_RESULT, 34 LOG_TYPE_RAW, 35 LOG_TYPE_SIGNAL 36 #ifdef _WIN32 37 ,LOG_TYPE_SOCKET 38 #endif 39 }; 40 #ifndef _WIN32 41 #define LOG_TYPE_SOCKET LOG_TYPE_SIGNAL 42 #endif 43 struct log_level{ 44 const char *name; 45 char color[10]; 46 }; 47 48 49 extern void do_log_call(const struct log_source src, const char *msg, unsigned int msglength, unsigned int type, unsigned int level, unsigned int destmask); 50 extern void do_log_call_composite(const struct log_source src, unsigned int type, unsigned int level, unsigned int destmask, ...); 51 extern struct log_level log_levels[LOG_LEVEL_COUNT]; 52 53 #define do_log(MSG, TYPE, LEVEL) do_log_call(LOG_COMPOSE_SRC,MSG,sizeof(MSG),TYPE,LEVEL,EGong_global_configuration.log.destinations) 54 #define do_log_comp(TYPE, LEVEL, MSGS) do_log_call_composite(LOG_COMPOSE_SRC,TYPE,LEVEL,EGong_global_configuration.log.destinations, #MSGS, NULL) 55 #define do_log_dynamic(MSG, TYPE, LEVEL) do_log_call(LOG_COMPOSE_SRC,MSG,strlen(MSG),TYPE,LEVEL,EGong_global_configuration.log.destinations)