168 lines
3.3 KiB
C++
168 lines
3.3 KiB
C++
#ifdef _WIN32
|
|
#include <conio.h>
|
|
#include <windows.h>
|
|
#include <cstdio>
|
|
#endif
|
|
#include <cstdio>
|
|
#include <string>
|
|
#include <time.h>
|
|
#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)
|
|
{
|
|
#ifdef _WIN32
|
|
__FOREGROUND = color;
|
|
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color + (__BACKGROUND << 4));
|
|
#else
|
|
|
|
#endif
|
|
}
|
|
|
|
// 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);
|
|
vprintf( Format, ap );
|
|
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);
|
|
vprintf( Format, ap );
|
|
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 );
|
|
vprintf( Format, ap );
|
|
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 );
|
|
}
|