aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Log.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/Log.cpp')
-rw-r--r--src/shared/Log.cpp570
1 files changed, 338 insertions, 232 deletions
diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp
index d042be82b77..f3fcae1faf7 100644
--- a/src/shared/Log.cpp
+++ b/src/shared/Log.cpp
@@ -1,7 +1,7 @@
/*
- * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
+ * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*
- * Copyright (C) 2008 Trinity <http://www.trinitycore.org/>
+ * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,139 +25,42 @@
#include "Util.h"
#include <stdarg.h>
+#include <stdio.h>
INSTANTIATE_SINGLETON_1( Log );
-enum LogType
-{
- LogNormal = 0,
- LogDetails,
- LogDebug,
- LogError
-};
-
-const int LogType_count = int(LogError) +1;
-
Log::Log() :
raLogfile(NULL), logfile(NULL), gmLogfile(NULL), charLogfile(NULL),
- dberLogfile(NULL), m_colored(false), m_includeTime(false), m_gmlog_per_account(false)
+ dberLogfile(NULL), chatLogfile(NULL), m_gmlog_per_account(false), m_colored(false)
{
Initialize();
}
-void Log::InitColors(const std::string& str)
-{
- if(str.empty())
- {
- m_colored = false;
- return;
- }
-
- int color[4];
-
- std::istringstream ss(str);
-
- for(int i = 0; i < LogType_count; ++i)
- {
- ss >> color[i];
-
- if(!ss)
- return;
-
- if(color[i] < 0 || color[i] >= Color_count)
- return;
- }
-
- for(int i = 0; i < LogType_count; ++i)
- m_colors[i] = Color(color[i]);
-
- m_colored = true;
-}
-
-void Log::SetColor(bool stdout_stream, Color color)
+Log::~Log()
{
- #if PLATFORM == PLATFORM_WINDOWS
-
- static WORD WinColorFG[Color_count] =
- {
- 0, // BLACK
- FOREGROUND_RED, // RED
- FOREGROUND_GREEN, // GREEN
- FOREGROUND_RED | FOREGROUND_GREEN, // BROWN
- FOREGROUND_BLUE, // BLUE
- FOREGROUND_RED | FOREGROUND_BLUE,// MAGENTA
- FOREGROUND_GREEN | FOREGROUND_BLUE, // CYAN
- FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,// WHITE
- // YELLOW
- FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY,
- // RED_BOLD
- FOREGROUND_RED | FOREGROUND_INTENSITY,
- // GREEN_BOLD
- FOREGROUND_GREEN | FOREGROUND_INTENSITY,
- FOREGROUND_BLUE | FOREGROUND_INTENSITY, // BLUE_BOLD
- // MAGENTA_BOLD
- FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
- // CYAN_BOLD
- FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
- // WHITE_BOLD
- FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
- };
-
- HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE );
- SetConsoleTextAttribute(hConsole, WinColorFG[color]);
- #else
-
- enum ANSITextAttr
- {
- TA_NORMAL=0,
- TA_BOLD=1,
- TA_BLINK=5,
- TA_REVERSE=7
- };
+ if( logfile != NULL )
+ fclose(logfile);
+ logfile = NULL;
- enum ANSIFgTextAttr
- {
- FG_BLACK=30, FG_RED, FG_GREEN, FG_BROWN, FG_BLUE,
- FG_MAGENTA, FG_CYAN, FG_WHITE, FG_YELLOW
- };
+ if( gmLogfile != NULL )
+ fclose(gmLogfile);
+ gmLogfile = NULL;
- enum ANSIBgTextAttr
- {
- BG_BLACK=40, BG_RED, BG_GREEN, BG_BROWN, BG_BLUE,
- BG_MAGENTA, BG_CYAN, BG_WHITE
- };
+ if (charLogfile != NULL)
+ fclose(charLogfile);
+ charLogfile = NULL;
- static uint8 UnixColorFG[Color_count] =
- {
- FG_BLACK, // BLACK
- FG_RED, // RED
- FG_GREEN, // GREEN
- FG_BROWN, // BROWN
- FG_BLUE, // BLUE
- FG_MAGENTA, // MAGENTA
- FG_CYAN, // CYAN
- FG_WHITE, // WHITE
- FG_YELLOW, // YELLOW
- FG_RED, // LRED
- FG_GREEN, // LGREEN
- FG_BLUE, // LBLUE
- FG_MAGENTA, // LMAGENTA
- FG_CYAN, // LCYAN
- FG_WHITE // LWHITE
- };
+ if( dberLogfile != NULL )
+ fclose(dberLogfile);
+ dberLogfile = NULL;
- fprintf((stdout_stream? stdout : stderr), "\x1b[%d%sm",UnixColorFG[color],(color>=YELLOW&&color<Color_count ?";1":""));
- #endif
-}
+ if (raLogfile != NULL)
+ fclose(raLogfile);
+ raLogfile = NULL;
-void Log::ResetColor(bool stdout_stream)
-{
- #if PLATFORM == PLATFORM_WINDOWS
- HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE );
- SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED );
- #else
- fprintf(( stdout_stream ? stdout : stderr ), "\x1b[0m");
- #endif
+ if (chatLogfile != NULL)
+ fclose(chatLogfile);
+ chatLogfile = NULL;
}
void Log::SetLogLevel(char *Level)
@@ -167,7 +70,7 @@ void Log::SetLogLevel(char *Level)
NewLevel = 0;
m_logLevel = NewLevel;
- printf( "LogLevel is %u\n",m_logLevel );
+ outString( "LogLevel is %u",m_logLevel );
}
void Log::SetLogFileLevel(char *Level)
@@ -177,11 +80,30 @@ void Log::SetLogFileLevel(char *Level)
NewLevel = 0;
m_logFileLevel = NewLevel;
- printf( "LogFileLevel is %u\n",m_logFileLevel );
+ outString( "LogFileLevel is %u",m_logFileLevel );
+}
+
+void Log::SetDBLogLevel(char *Level)
+{
+ int32 NewLevel = atoi((char*)Level);
+ if ( NewLevel < 0 )
+ NewLevel = 0;
+ m_dbLogLevel = NewLevel;
+
+ outString( "DBLogLevel is %u",m_dbLogLevel );
}
void Log::Initialize()
{
+ /// Check whether we'll log GM commands/RA events/character outputs/chat stuffs
+ m_dbChar = sConfig.GetBoolDefault("LogDB.Char", false);
+ m_dbRA = sConfig.GetBoolDefault("LogDB.RA", false);
+ m_dbGM = sConfig.GetBoolDefault("LogDB.GM", false);
+ m_dbChat = sConfig.GetBoolDefault("LogDB.Chat", false);
+
+ /// Realm must be 0 by default
+ SetRealmID(0);
+
/// Common log files data
m_logsDir = sConfig.GetStringDefault("LogsDir","");
if(!m_logsDir.empty())
@@ -194,6 +116,7 @@ void Log::Initialize()
/// Open specific log files
logfile = openLogFile("LogFile","LogTimestamp","w");
+ InitColors(sConfig.GetStringDefault("LogColors", ""));
m_gmlog_per_account = sConfig.GetBoolDefault("GmLogPerAccount",false);
if(!m_gmlog_per_account)
@@ -230,12 +153,12 @@ void Log::Initialize()
dberLogfile = openLogFile("DBErrorLogFile",NULL,"a");
raLogfile = openLogFile("RaLogFile",NULL,"a");
+ chatLogfile = openLogFile("ChatLogFile","ChatLogTimestamp","a");
// Main log file settings
- m_includeTime = sConfig.GetBoolDefault("LogTime", false);
- m_logLevel = sConfig.GetIntDefault("LogLevel", 0);
- m_logFileLevel = sConfig.GetIntDefault("LogFileLevel", 0);
- InitColors(sConfig.GetStringDefault("LogColors", ""));
+ m_logLevel = sConfig.GetIntDefault("LogLevel", LOGL_NORMAL);
+ m_logFileLevel = sConfig.GetIntDefault("LogFileLevel", LOGL_NORMAL);
+ m_dbLogLevel = sConfig.GetIntDefault("DBLogLevel", LOGL_NORMAL);
m_logFilter = 0;
@@ -245,6 +168,8 @@ void Log::Initialize()
m_logFilter |= LOG_FILTER_CREATURE_MOVES;
if(sConfig.GetBoolDefault("LogFilter_VisibilityChanges", true))
m_logFilter |= LOG_FILTER_VISIBILITY_CHANGES;
+ if(sConfig.GetBoolDefault("LogFilter_AchievementUpdates", true))
+ m_logFilter |= LOG_FILTER_ACHIEVEMENT_UPDATES;
// Char log settings
m_charLog_Dump = sConfig.GetBoolDefault("CharLogDump", false);
@@ -291,17 +216,117 @@ void Log::outTimestamp(FILE* file)
fprintf(file,"%-4d-%02d-%02d %02d:%02d:%02d ",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday,aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
}
-void Log::outTime()
+void Log::InitColors(const std::string& str)
{
- time_t t = time(NULL);
- tm* aTm = localtime(&t);
- // YYYY year
- // MM month (2 digits 01-12)
- // DD day (2 digits 01-31)
- // HH hour (2 digits 00-23)
- // MM minutes (2 digits 00-59)
- // SS seconds (2 digits 00-59)
- printf("%02d:%02d:%02d ",aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
+ if(str.empty())
+ {
+ m_colored = false;
+ return;
+ }
+
+ int color[4];
+
+ std::istringstream ss(str);
+
+ for(int i = 0; i < LogLevels; ++i)
+ {
+ ss >> color[i];
+
+ if(!ss)
+ return;
+
+ if(color[i] < 0 || color[i] >= Colors)
+ return;
+ }
+
+ for(int i = 0; i < LogLevels; ++i)
+ m_colors[i] = ColorTypes(color[i]);
+
+ m_colored = true;
+}
+
+void Log::SetColor(bool stdout_stream, ColorTypes color)
+{
+ #if PLATFORM == PLATFORM_WINDOWS
+ static WORD WinColorFG[Colors] =
+ {
+ 0, // BLACK
+ FOREGROUND_RED, // RED
+ FOREGROUND_GREEN, // GREEN
+ FOREGROUND_RED | FOREGROUND_GREEN, // BROWN
+ FOREGROUND_BLUE, // BLUE
+ FOREGROUND_RED | FOREGROUND_BLUE,// MAGENTA
+ FOREGROUND_GREEN | FOREGROUND_BLUE, // CYAN
+ FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,// WHITE
+ // YELLOW
+ FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY,
+ // RED_BOLD
+ FOREGROUND_RED | FOREGROUND_INTENSITY,
+ // GREEN_BOLD
+ FOREGROUND_GREEN | FOREGROUND_INTENSITY,
+ FOREGROUND_BLUE | FOREGROUND_INTENSITY, // BLUE_BOLD
+ // MAGENTA_BOLD
+ FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
+ // CYAN_BOLD
+ FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
+ // WHITE_BOLD
+ FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
+ };
+
+ HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE );
+ SetConsoleTextAttribute(hConsole, WinColorFG[color]);
+ #else
+ enum ANSITextAttr
+ {
+ TA_NORMAL=0,
+ TA_BOLD=1,
+ TA_BLINK=5,
+ TA_REVERSE=7
+ };
+
+ enum ANSIFgTextAttr
+ {
+ FG_BLACK=30, FG_RED, FG_GREEN, FG_BROWN, FG_BLUE,
+ FG_MAGENTA, FG_CYAN, FG_WHITE, FG_YELLOW
+ };
+
+ enum ANSIBgTextAttr
+ {
+ BG_BLACK=40, BG_RED, BG_GREEN, BG_BROWN, BG_BLUE,
+ BG_MAGENTA, BG_CYAN, BG_WHITE
+ };
+
+ static uint8 UnixColorFG[Colors] =
+ {
+ FG_BLACK, // BLACK
+ FG_RED, // RED
+ FG_GREEN, // GREEN
+ FG_BROWN, // BROWN
+ FG_BLUE, // BLUE
+ FG_MAGENTA, // MAGENTA
+ FG_CYAN, // CYAN
+ FG_WHITE, // WHITE
+ FG_YELLOW, // YELLOW
+ FG_RED, // LRED
+ FG_GREEN, // LGREEN
+ FG_BLUE, // LBLUE
+ FG_MAGENTA, // LMAGENTA
+ FG_CYAN, // LCYAN
+ FG_WHITE // LWHITE
+ };
+
+ fprintf((stdout_stream? stdout : stderr), "\x1b[%d%sm", UnixColorFG[color], (color >= YELLOW && color < Colors ? ";1" : ""));
+ #endif
+}
+
+void Log::ResetColor(bool stdout_stream)
+{
+ #if PLATFORM == PLATFORM_WINDOWS
+ HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE );
+ SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED );
+ #else
+ fprintf(( stdout_stream ? stdout : stderr ), "\x1b[0m");
+ #endif
}
std::string Log::GetTimestampStr()
@@ -319,16 +344,42 @@ std::string Log::GetTimestampStr()
return std::string(buf);
}
-void Log::outTitle( const char * str)
+void Log::outDB( LogTypes type, const char * str )
+{
+ if(!str || std::string(str).empty() || type >= MAX_LOG_TYPES)
+ return;
+
+ std::string new_str(str);
+ LoginDatabase.escape_string(new_str);
+
+ LoginDatabase.PExecute("INSERT INTO logs (time, realm, type, string) "
+ "VALUES ("I64FMTD", %u, %u, '%s');", uint64(time(0)), realm, (uint32)type, new_str.c_str());
+}
+
+void Log::outString( const char * str, ... )
{
if( !str )
return;
+ if (m_enableLogDB)
+ {
+ // we don't want empty strings in the DB
+ std::string s(str);
+ if(s.empty() || s == " ")
+ return;
+
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_STRING, nnew_str);
+ va_end(ap2);
+ }
+
if(m_colored)
- SetColor(true,WHITE);
+ SetColor(true,m_colors[LOGL_NORMAL]);
- // not expected utf8 and then send as-is
- printf( str );
+ UTF8PRINTF(stdout,str,);
if(m_colored)
ResetColor(true);
@@ -336,18 +387,20 @@ void Log::outTitle( const char * str)
printf( "\n" );
if(logfile)
{
- fprintf(logfile, str);
+ outTimestamp(logfile);
+ va_list ap;
+ va_start(ap, str);
+ vfprintf(logfile, str, ap);
fprintf(logfile, "\n" );
+ va_end(ap);
+
fflush(logfile);
}
-
fflush(stdout);
}
-void Log::outString()
+void Log::outString( )
{
- if(m_includeTime)
- outTime();
printf( "\n" );
if(logfile)
{
@@ -358,36 +411,44 @@ void Log::outString()
fflush(stdout);
}
-void Log::outString( const char * str, ... )
+void Log::outCrash( const char * err, ... )
{
- if( !str )
+ if( !err )
return;
- if(m_colored)
- SetColor(true,m_colors[LogNormal]);
+ if (m_enableLogDB)
+ {
+ va_list ap2;
+ va_start(ap2, err);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, err, ap2);
+ outDB(LOG_TYPE_CRASH, nnew_str);
+ va_end(ap2);
+ }
- if(m_includeTime)
- outTime();
+ if(m_colored)
+ SetColor(false,RED);
- UTF8PRINTF(stdout,str,);
+ UTF8PRINTF(stderr,err,);
if(m_colored)
- ResetColor(true);
+ ResetColor(false);
- printf( "\n" );
+ fprintf( stderr, "\n" );
if(logfile)
{
outTimestamp(logfile);
+ fprintf(logfile, "CRASH ALERT: " );
va_list ap;
- va_start(ap, str);
- vfprintf(logfile, str, ap);
- fprintf(logfile, "\n" );
+ va_start(ap, err);
+ vfprintf(logfile, err, ap);
va_end(ap);
+ fprintf(logfile, "\n" );
fflush(logfile);
}
- fflush(stdout);
+ fflush(stderr);
}
void Log::outError( const char * err, ... )
@@ -395,11 +456,18 @@ void Log::outError( const char * err, ... )
if( !err )
return;
- if(m_colored)
- SetColor(false,m_colors[LogError]);
+ if (m_enableLogDB)
+ {
+ va_list ap2;
+ va_start(ap2, err);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, err, ap2);
+ outDB(LOG_TYPE_ERROR, nnew_str);
+ va_end(ap2);
+ }
- if(m_includeTime)
- outTime();
+ if(m_colored)
+ SetColor(false,RED);
UTF8PRINTF(stderr,err,);
@@ -410,7 +478,7 @@ void Log::outError( const char * err, ... )
if(logfile)
{
outTimestamp(logfile);
- fprintf(logfile, "ERROR:" );
+ fprintf(logfile, "ERROR: " );
va_list ap;
va_start(ap, err);
@@ -429,10 +497,7 @@ void Log::outErrorDb( const char * err, ... )
return;
if(m_colored)
- SetColor(false,m_colors[LogError]);
-
- if(m_includeTime)
- outTime();
+ SetColor(false,RED);
UTF8PRINTF(stderr,err,);
@@ -444,7 +509,7 @@ void Log::outErrorDb( const char * err, ... )
if(logfile)
{
outTimestamp(logfile);
- fprintf(logfile, "ERROR:" );
+ fprintf(logfile, "ERROR: " );
va_list ap;
va_start(ap, err);
@@ -458,7 +523,6 @@ void Log::outErrorDb( const char * err, ... )
if(dberLogfile)
{
outTimestamp(dberLogfile);
-
va_list ap;
va_start(ap, err);
vfprintf(dberLogfile, err, ap);
@@ -475,13 +539,20 @@ void Log::outBasic( const char * str, ... )
if( !str )
return;
- if( m_logLevel > 0 )
+ if (m_enableLogDB && m_dbLogLevel > LOGL_NORMAL)
{
- if(m_colored)
- SetColor(true,m_colors[LogDetails]);
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_BASIC, nnew_str);
+ va_end(ap2);
+ }
- if(m_includeTime)
- outTime();
+ if( m_logLevel > LOGL_NORMAL )
+ {
+ if(m_colored)
+ SetColor(true,m_colors[LOGL_BASIC]);
UTF8PRINTF(stdout,str,);
@@ -491,10 +562,10 @@ void Log::outBasic( const char * str, ... )
printf( "\n" );
}
- if(logfile && m_logFileLevel > 0)
+ if(logfile && m_logFileLevel > LOGL_NORMAL)
{
- va_list ap;
outTimestamp(logfile);
+ va_list ap;
va_start(ap, str);
vfprintf(logfile, str, ap);
fprintf(logfile, "\n" );
@@ -509,14 +580,20 @@ void Log::outDetail( const char * str, ... )
if( !str )
return;
- if( m_logLevel > 1 )
+ if (m_enableLogDB && m_dbLogLevel > LOGL_BASIC)
{
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_DETAIL, nnew_str);
+ va_end(ap2);
+ }
+ if( m_logLevel > LOGL_BASIC )
+ {
if(m_colored)
- SetColor(true,m_colors[LogDetails]);
-
- if(m_includeTime)
- outTime();
+ SetColor(true,m_colors[LOGL_DETAIL]);
UTF8PRINTF(stdout,str,);
@@ -525,10 +602,10 @@ void Log::outDetail( const char * str, ... )
printf( "\n" );
}
- if(logfile && m_logFileLevel > 1)
+ if(logfile && m_logFileLevel > LOGL_BASIC)
{
- va_list ap;
outTimestamp(logfile);
+ va_list ap;
va_start(ap, str);
vfprintf(logfile, str, ap);
fprintf(logfile, "\n" );
@@ -543,17 +620,12 @@ void Log::outDebugInLine( const char * str, ... )
{
if( !str )
return;
- if( m_logLevel > 2 )
- {
- if(m_colored)
- SetColor(true,m_colors[LogDebug]);
+ if( m_logLevel > LOGL_DETAIL )
+ {
UTF8PRINTF(stdout,str,);
-
- if(m_colored)
- ResetColor(true);
}
- if(logfile && m_logFileLevel > 2)
+ if(logfile && m_logFileLevel > LOGL_DETAIL)
{
va_list ap;
va_start(ap, str);
@@ -566,13 +638,21 @@ void Log::outDebug( const char * str, ... )
{
if( !str )
return;
- if( m_logLevel > 2 )
+
+ if (m_enableLogDB && m_dbLogLevel > LOGL_DETAIL)
{
- if(m_colored)
- SetColor(true,m_colors[LogDebug]);
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_DEBUG, nnew_str);
+ va_end(ap2);
+ }
- if(m_includeTime)
- outTime();
+ if( m_logLevel > LOGL_DETAIL )
+ {
+ if(m_colored)
+ SetColor(true,m_colors[LOGL_DEBUG]);
UTF8PRINTF(stdout,str,);
@@ -581,10 +661,9 @@ void Log::outDebug( const char * str, ... )
printf( "\n" );
}
- if(logfile && m_logFileLevel > 2)
+ if(logfile && m_logFileLevel > LOGL_DETAIL)
{
outTimestamp(logfile);
-
va_list ap;
va_start(ap, str);
vfprintf(logfile, str, ap);
@@ -601,13 +680,21 @@ void Log::outCommand( uint32 account, const char * str, ... )
if( !str )
return;
- if( m_logLevel > 1 )
+ // TODO: support accountid
+ if (m_enableLogDB && m_dbGM)
{
- if(m_colored)
- SetColor(true,m_colors[LogDetails]);
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_GM, nnew_str);
+ va_end(ap2);
+ }
- if(m_includeTime)
- outTime();
+ if( m_logLevel > LOGL_NORMAL )
+ {
+ if(m_colored)
+ SetColor(true,m_colors[LOGL_BASIC]);
UTF8PRINTF(stdout,str,);
@@ -616,10 +703,10 @@ void Log::outCommand( uint32 account, const char * str, ... )
printf( "\n" );
}
- if(logfile && m_logFileLevel > 1)
+ if(logfile && m_logFileLevel > LOGL_NORMAL)
{
- va_list ap;
outTimestamp(logfile);
+ va_list ap;
va_start(ap, str);
vfprintf(logfile, str, ap);
fprintf(logfile, "\n" );
@@ -631,8 +718,8 @@ void Log::outCommand( uint32 account, const char * str, ... )
{
if (FILE* per_file = openGmlogPerAccount (account))
{
- va_list ap;
outTimestamp(per_file);
+ va_list ap;
va_start(ap, str);
vfprintf(per_file, str, ap);
fprintf(per_file, "\n" );
@@ -642,8 +729,8 @@ void Log::outCommand( uint32 account, const char * str, ... )
}
else if (gmLogfile)
{
- va_list ap;
outTimestamp(gmLogfile);
+ va_list ap;
va_start(ap, str);
vfprintf(gmLogfile, str, ap);
fprintf(gmLogfile, "\n" );
@@ -656,14 +743,23 @@ void Log::outCommand( uint32 account, const char * str, ... )
void Log::outChar(const char * str, ... )
{
-
if (!str)
return;
+ if (m_enableLogDB && m_dbChar)
+ {
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_CHAR, nnew_str);
+ va_end(ap2);
+ }
+
if(charLogfile)
{
- va_list ap;
outTimestamp(charLogfile);
+ va_list ap;
va_start(ap, str);
vfprintf(charLogfile, str, ap);
fprintf(charLogfile, "\n" );
@@ -681,48 +777,58 @@ void Log::outCharDump( const char * str, uint32 account_id, uint32 guid, const c
}
}
-void Log::outMenu( const char * str, ... )
+void Log::outRemote( const char * str, ... )
{
if( !str )
return;
- SetColor(true,m_colors[LogNormal]);
-
- if(m_includeTime)
- outTime();
-
- UTF8PRINTF(stdout,str,);
-
- ResetColor(true);
-
- if(logfile)
+ if (m_enableLogDB && m_dbRA)
{
- outTimestamp(logfile);
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_RA, nnew_str);
+ va_end(ap2);
+ }
+ if (raLogfile)
+ {
+ outTimestamp(raLogfile);
va_list ap;
va_start(ap, str);
- vfprintf(logfile, str, ap);
+ vfprintf(raLogfile, str, ap);
+ fprintf(raLogfile, "\n" );
va_end(ap);
-
- fprintf(logfile, "\n" );
- fflush(logfile);
+ fflush(raLogfile);
}
fflush(stdout);
}
-void Log::outRALog( const char * str, ... )
+void Log::outChat( const char * str, ... )
{
if( !str )
return;
- va_list ap;
- if (raLogfile)
+
+ if (m_enableLogDB && m_dbChat)
{
- outTimestamp(raLogfile);
+ va_list ap2;
+ va_start(ap2, str);
+ char nnew_str[MAX_QUERY_LEN];
+ vsnprintf(nnew_str, MAX_QUERY_LEN, str, ap2);
+ outDB(LOG_TYPE_CHAT, nnew_str);
+ va_end(ap2);
+ }
+
+ if (chatLogfile)
+ {
+ outTimestamp(chatLogfile);
+ va_list ap;
va_start(ap, str);
- vfprintf(raLogfile, str, ap);
- fprintf(raLogfile, "\n" );
+ vfprintf(chatLogfile, str, ap);
+ fprintf(chatLogfile, "\n" );
+ fflush(chatLogfile);
va_end(ap);
- fflush(raLogfile);
}
fflush(stdout);
}