#include #include #include #include #include #include "log.h" // Basic colors typedef enum { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE } COLORS; // Our base colors static int __BACKGROUND = BLACK; static int __FOREGROUND = LIGHTGRAY; // Change console text color void textcolor(int color) { } // This function logs based on flags void Log( enum msg_type flag, const char *Format, ... ) { va_list ap; // For arguments va_start( ap, Format ); // Timestamp time_t rtime; time (&rtime); char timestamp[26]; ctime_s (timestamp, sizeof (timestamp), &rtime); timestamp[strlen (timestamp) - 1] = ' '; switch (flag) { case MSG_NONE: // direct printf replacement { textcolor(WHITE); va_list apcopy; va_copy(apcopy, ap); vprintf( Format, apcopy ); va_end(apcopy); break; } case MSG_STATUS: textcolor(GREEN); printf("[STATUS]: "); break; case MSG_SQL: textcolor(CYAN); printf("[SQL]: "); break; case MSG_INFO: textcolor(LIGHTGREEN); printf("[INFO]: "); break; case MSG_NOTICE: textcolor(LIGHTCYAN); printf("[NOTICE]: "); break; case MSG_WARNING: textcolor(YELLOW); printf("[WARNING]: "); break; case MSG_DEBUG: textcolor(LIGHTBLUE); printf("[DEBUG]: "); break; case MSG_ERROR: textcolor(RED); printf("[ERROR]: "); break; case MSG_FATALERROR: textcolor(LIGHTRED); printf("[FATAL ERROR]: "); break; case MSG_HACK: textcolor(LIGHTRED); printf("[HACK]: "); break; case MSG_LOAD: textcolor(BROWN); printf("[LOADING]: "); break; case MSG_GMACTION: textcolor(MAGENTA); printf("[GM ACTION]: "); break; case MSG_START: { textcolor(MAGENTA); va_list apcopy; va_copy(apcopy, ap); vprintf( Format, apcopy ); va_end(apcopy); printf( "\r\n" ); break; } //case MSG_SDEBUG: // textcolor(MAGENTA); // printf("[SDEBUG]: "); // break; //case MSG_QUERY: // textcolor(LIGHTBLUE); // printf("[QUERY]: "); // break; //default: // textcolor(MAGENTA); // printf("[UNKNOWN CASE]: "); // break; } textcolor(LIGHTGRAY); if(flag!=MSG_QUERY) { printf( "%s- ", timestamp ); { va_list apcopy; va_copy(apcopy, ap); vprintf( Format, apcopy ); va_end(apcopy); } printf( (flag==MSG_LOAD) ? "\r" : "\n" ); } FILE *fh = NULL; switch(LOG_THISSERVER) { case LOG_LOGIN_SERVER: fopen_s (&fh, LOG_DIRECTORY LOG_FILENAME_LOGINFILE, "a+"); break; case LOG_CHARACTER_SERVER: fopen_s (&fh, LOG_DIRECTORY LOG_FILENAME_CHARFILE, "a+"); break; case LOG_WORLD_SERVER: fopen_s (&fh, LOG_DIRECTORY LOG_FILENAME_WORLDFILE, "a+"); break; case LOG_SAME_FILE: fopen_s (&fh, LOG_DIRECTORY LOG_DEFAULT_FILE, "a+"); break; default: break; } if(flag == MSG_QUERY) { if(fh != NULL) fclose(fh); fopen_s (&fh, LOG_DIRECTORY "queries.txt", "a+"); } if ( fh != NULL ) { fprintf( fh, "%s- ", timestamp ); vfprintf( fh, Format, ap ); fputc( '\n', fh ); fclose( fh ); } va_end ( ap ); }