From d2ad84c6517902a7c7b64f39241a1b7a5f1d72f0 Mon Sep 17 00:00:00 2001 From: FreeArtMan Date: Sun, 26 Nov 2017 00:23:12 +0000 Subject: Added basic loging --- log.h | 298 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 log.h (limited to 'log.h') diff --git a/log.h b/log.h new file mode 100644 index 0000000..6c7a860 --- /dev/null +++ b/log.h @@ -0,0 +1,298 @@ +#ifndef __AGNI_LOG_H +#define __AGNI_LOG_H + +#include +#include + +//bunch of macroses that will just disable log code and save some binary space +#define LOG_DEBUG_ENABLE +#define LOG_ERROR_ENABLE +#define LOG_WARNING_ENABLE +#define LOG_FATAL_ENABLE +#define LOG_INFO_ENABLE + +#define SUB_MEM +#define SUB_CMDS +#define SUB_MSG +#define SUB_NET + +//log level +#define LOG_LEVEL_NONE 0 +#define LOG_LEVEL_FATAL 1 +#define LOG_LEVEL_ERROR 2 +#define LOG_LEVEL_WARNING 3 +#define LOG_LEVEL_INFO 4 +#define LOG_LEVEL_DEBUG 5 + +//logging subsystem +#define LOG_SUB_NONE 0 +#define LOG_SUB_MEM 1 +#define LOG_SUB_CMDS 2 +#define LOG_SUB_MSG 3 +#define LOG_SUB_NET 4 + +//loging location +#define LOG_LOC_STDIO 0 +#define LOG_LOC_FILE 1 + +typedef struct logging_t +{ + int disabled; + int sub; + int level; + int location; + FILE *fd; + char *fname; +} logging_t; + +#define NUM_OF_LOG 5 +logging_t __logs[NUM_OF_LOG]; //<-be carefull with this number woop woop + +int log_init(); +int log_register_sub(int sub, int level, int type, char *location); + +#define LOG_PRINTF fprintf +#define LOG_COLORIZE +#define LOG_PRINT_LINENUM +#define LOG_PRINT_FILENAME +#define LOG_PRINT_DEBUG + +//use color +#ifdef LOG_COLORIZE + #define LOG_D_COLOR "7;32m" + #define LOG_D_COLOR_S "\033[" LOG_D_COLOR + #define LOG_D_COLOR_E "\033[0m" + #define LOG_E_COLOR "0;31m" + #define LOG_E_COLOR_S "\033[" LOG_E_COLOR + #define LOG_E_COLOR_E "\033[0m" + #define LOG_W_COLOR "0;35m" + #define LOG_W_COLOR_S "\033[" LOG_W_COLOR + #define LOG_W_COLOR_E "\033[0m" + #define LOG_F_COLOR "5;31m" + #define LOG_F_COLOR_S "\033[" LOG_F_COLOR + #define LOG_F_COLOR_E "\033[0m" + #define LOG_I_COLOR "0;36m" + #define LOG_I_COLOR_S "\033[" LOG_I_COLOR + #define LOG_I_COLOR_E "\033[0m" +#else + #define LOG_D_COLOR + #define LOG_D_COLOR_S + #define LOG_D_COLOR_E + #define LOG_E_COLOR + #define LOG_E_COLOR_S + #define LOG_E_COLOR_E + #define LOG_W_COLOR + #define LOG_W_COLOR_S + #define LOG_W_COLOR_E + #define LOG_F_COLOR + #define LOG_F_COLOR_S + #define LOG_F_COLOR_E + #define LOG_I_COLOR + #define LOG_I_COLOR_S + #define LOG_I_COLOR_E +#endif + +//print debug line +#ifdef LOG_PRINT_LINENUM + #define LOG_PRINT_LINE_F ":%d " + #define LOG_PRINT_LINE_D __LINE__ +#else + #define LOG_PRINT_LINE_F "%s" + #define LOG_PRINT_LINE_D " " +#endif + +//print +#ifdef LOG_PRINT_FILENAME + #define LOG_PRINT_FILE_F "%s" + #define LOG_PRINT_FILE_D __FILE__ +#else + #define LOG_PRINT_FILE_F "%s" + #define LOG_PRINT_FILE_D " " +#endif + +//print debug string +#ifdef LOG_PRINT_DEBUG + #define LOG_PRINT_DEBUG_F "DEBUG: " + #define LOG_PRINT_WARNING_F "WARN: " + #define LOG_PRINT_FATAL_F "FATAL: " + #define LOG_PRINT_INFO_F "INFO: " + #define LOG_PRINT_ERROR_F "ERROR: " +#else + #define LOG_PRINT_DEBUG_F "" + #define LOG_PRINT_WARNING_F "" + #define LOG_PRINT_FATAL_F "" + #define LOG_PRINT_ERROR_F "" + #define LOG_PRINT_INFO_F "" +#endif + +#define LOG_INFO( fd, format, args ... ) LOG_PRINTF( fd, LOG_I_COLOR_S LOG_PRINT_INFO_F \ + LOG_PRINT_FILE_F LOG_PRINT_LINE_F format LOG_I_COLOR_E, LOG_PRINT_FILE_D, \ + LOG_PRINT_LINE_D, ##args); + +#define LOG_DEBUG( fd, format, args ... ) LOG_PRINTF( fd, LOG_D_COLOR_S LOG_PRINT_DEBUG_F \ + LOG_PRINT_FILE_F LOG_PRINT_LINE_F format LOG_D_COLOR_E, LOG_PRINT_FILE_D, \ + LOG_PRINT_LINE_D, ##args); + +#define LOG_ERROR( fd, format, args ... ) LOG_PRINTF( fd, LOG_E_COLOR_S LOG_PRINT_ERROR_F \ + LOG_PRINT_FILE_F LOG_PRINT_LINE_F format LOG_E_COLOR_E, LOG_PRINT_FILE_D, \ + LOG_PRINT_LINE_D, ##args); + +#define LOG_WARNING( fd, format, args ... ) LOG_PRINTF( fd, LOG_W_COLOR_S LOG_PRINT_WARNING_F \ + LOG_PRINT_FILE_F LOG_PRINT_LINE_F format LOG_W_COLOR_E, LOG_PRINT_FILE_D, \ + LOG_PRINT_LINE_D, ##args); + +#define LOG_FATAL( fd, format, args ... ) LOG_PRINTF( fd, LOG_F_COLOR_S LOG_PRINT_FATAL_F \ + LOG_PRINT_FILE_F LOG_PRINT_LINE_F format LOG_F_COLOR_E, LOG_PRINT_FILE_D, \ + LOG_PRINT_LINE_D, ##args); + +//------------------------------------------------------------------------------ +#ifdef LOG_INFO_ENABLE + #define LOG_NONE_I(format,args ... ) {\ + if (0 == __logs[LOG_SUB_NONE].disabled){\ + if (__logs[LOG_SUB_NONE].level >= LOG_LEVEL_INFO){\ + if (__logs[LOG_SUB_NONE].location == LOG_LOC_STDIO){\ + LOG_INFO(stdout, format, ##args );\ + } else {\ + LOG_INFO(__logs[LOG_SUB_NONE].fd, format, ##args );\ + }}}\ + } + #ifdef SUB_MEM + #define LOG_MEM_I(format,args ... ) {\ + if (0 == __logs[LOG_SUB_MEM].disabled){\ + if (__logs[LOG_SUB_MEM].level >= LOG_LEVEL_INFO){\ + if (__logs[LOG_SUB_MEM].location == LOG_LOC_STDIO){\ + LOG_INFO(stdout, "MEM-" );\ + LOG_INFO(stdout, format, ##args );\ + } else {\ + LOG_INFO(stdout, "MEM-" );\ + LOG_INFO(__logs[LOG_SUB_MEM].fd, format, ##args );\ + }}}\ + } + #else + #define LOG_MEM_I(format,args ...) {} + #endif +#else + LOG_NONE_I(format,args ...) {} +#endif + +//------------------------------------------------------------------------------ +#ifdef LOG_INFO_ENABLE + #define LOG_NONE_D(format,args ... ) {\ + if (0 == __logs[LOG_SUB_NONE].disabled){\ + if (__logs[LOG_SUB_NONE].level >= LOG_LEVEL_DEBUG){\ + if (__logs[LOG_SUB_NONE].location == LOG_LOC_STDIO){\ + LOG_DEBUG(stdout, format, ##args );\ + } else {\ + LOG_DEBUG(__logs[LOG_SUB_NONE].fd, format, ##args );\ + }}}\ + } + #ifdef SUB_MEM + #define LOG_MEM_D(format,args ... ) {\ + if (0 == __logs[LOG_SUB_MEM].disabled){\ + if (__logs[LOG_SUB_MEM].level >= LOG_LEVEL_DEBUG){\ + if (__logs[LOG_SUB_MEM].location == LOG_LOC_STDIO){\ + LOG_DEBUG(stdout, "MEM-" );\ + LOG_DEBUG(stdout, format, ##args );\ + } else {\ + LOG_DEBUG(__logs[LOG_SUB_MEM].fd, "MEM-" );\ + LOG_DEBUG(__logs[LOG_SUB_MEM].fd, format, ##args );\ + }}}\ + } + #else + #define LOG_MEM_D(format,args ...) {} + #endif +#else + LOG_NONE_D(format,args ...) {} +#endif + +//------------------------------------------------------------------------------ +#ifdef LOG_INFO_ENABLE + #define LOG_NONE_E(format,args ... ) {\ + if (0 == __logs[LOG_SUB_NONE].disabled){\ + if (__logs[LOG_SUB_NONE].level >= LOG_LEVEL_ERROR){\ + if (__logs[LOG_SUB_NONE].location == LOG_LOC_STDIO){\ + LOG_ERROR(stdout, format, ##args );\ + } else {\ + LOG_ERROR(__logs[LOG_SUB_NONE].fd, format, ##args );\ + }}}\ + } + #ifdef SUB_MEM + #define LOG_MEM_E(format,args ... ) {\ + if (0 == __logs[LOG_SUB_MEM].disabled){\ + if (__logs[LOG_SUB_MEM].level >= LOG_LEVEL_ERROR){\ + if (__logs[LOG_SUB_MEM].location == LOG_LOC_STDIO){\ + LOG_ERROR(stdout, "MEM-" );\ + LOG_ERROR(stdout, format, ##args );\ + } else {\ + LOG_ERROR(__logs[LOG_SUB_MEM].fd, "MEM-" );\ + LOG_ERROR(__logs[LOG_SUB_MEM].fd, format, ##args );\ + }}}\ + } + #else + #define LOG_MEM_E(format,args ...) {} + #endif +#else + LOG_NONE_E(format,args ...) {} +#endif + +//------------------------------------------------------------------------------ +#ifdef LOG_INFO_ENABLE + #define LOG_NONE_W(format,args ... ) {\ + if (0 == __logs[LOG_SUB_NONE].disabled){\ + if (__logs[LOG_SUB_NONE].level >= LOG_LEVEL_WARNING){\ + if (__logs[LOG_SUB_NONE].location == LOG_LOC_STDIO){\ + LOG_WARNING(stdout, format, ##args );\ + } else {\ + LOG_WARNING(__logs[LOG_SUB_NONE].fd, format, ##args );\ + }}}\ + } + #ifdef SUB_MEM + #define LOG_MEM_W(format,args ... ) {\ + if (0 == __logs[LOG_SUB_MEM].disabled){\ + if (__logs[LOG_SUB_MEM].level >= LOG_LEVEL_WARNING){\ + if (__logs[LOG_SUB_MEM].location == LOG_LOC_STDIO){\ + LOG_WARNING(stdout, "MEM-" );\ + LOG_WARNING(stdout, format, ##args );\ + } else {\ + LOG_WARNING(__logs[LOG_SUB_MEM].fd, "MEM-" );\ + LOG_WARNING(__logs[LOG_SUB_MEM].fd, format, ##args );\ + }}}\ + } + #else + #define LOG_MEM_W(format,args ...) {} + #endif +#else + LOG_NONE_W(format,args ...) {} +#endif + +//------------------------------------------------------------------------------ +#ifdef LOG_INFO_ENABLE + #define LOG_NONE_F(format,args ... ) {\ + if (0 == __logs[LOG_SUB_NONE].disabled){\ + if (__logs[LOG_SUB_NONE].level >= LOG_LEVEL_FATAL){\ + if (__logs[LOG_SUB_NONE].location == LOG_LOC_STDIO){\ + LOG_FATAL(stdout, format, ##args );\ + } else {\ + LOG_FATAL(__logs[LOG_SUB_NONE].fd, format, ##args );\ + }}}\ + } + #ifdef SUB_MEM + #define LOG_MEM_F(format,args ... ) {\ + if (0 == __logs[LOG_SUB_MEM].disabled){\ + if (__logs[LOG_SUB_MEM].level >= LOG_LEVEL_FATAL){\ + if (__logs[LOG_SUB_MEM].location == LOG_LOC_STDIO){\ + LOG_FATAL(stdout, "MEM-" );\ + LOG_FATAL(stdout, format, ##args );\ + } else {\ + LOG_FATAL(__logs[LOG_SUB_MEM].fd, "MEM-" );\ + LOG_FATAL(__logs[LOG_SUB_MEM].fd, format, ##args );\ + }}}\ + } + #else + #define LOG_MEM_F(format,args ...) {} + #endif +#else + LOG_NONE_f(format,args ...) {} +#endif + +#endif \ No newline at end of file -- cgit v1.2.3