aboutsummaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authormegamage <none@none>2008-11-25 16:36:50 -0600
committermegamage <none@none>2008-11-25 16:36:50 -0600
commitf6ea784eda445794bf99ba2b9f97012ea4009f59 (patch)
tree97ed434b569dd1194854908cd3fe67a9129a5e8b /src/shared
parent52f2e35d65af17abfd9499232398bab338db78e1 (diff)
*Update to Mangos 6848. Source: Mangos.
--HG-- branch : trunk
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/Log.cpp148
-rw-r--r--src/shared/Log.h15
-rw-r--r--src/shared/Util.h12
3 files changed, 115 insertions, 60 deletions
diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp
index e30ecc56f25..fba8adc806b 100644
--- a/src/shared/Log.cpp
+++ b/src/shared/Log.cpp
@@ -38,6 +38,13 @@ enum LogType
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)
+{
+ Initialize();
+}
+
void Log::InitColors(std::string str)
{
if(str.empty())
@@ -175,73 +182,56 @@ void Log::SetLogFileLevel(char *Level)
void Log::Initialize()
{
- std::string logsDir = sConfig.GetStringDefault("LogsDir","");
-
- if(!logsDir.empty())
+ /// Common log files data
+ m_logsDir = sConfig.GetStringDefault("LogsDir","");
+ if(!m_logsDir.empty())
{
- if((logsDir.at(logsDir.length()-1)!='/') && (logsDir.at(logsDir.length()-1)!='\\'))
- logsDir.append("/");
+ if((m_logsDir.at(m_logsDir.length()-1)!='/') && (m_logsDir.at(m_logsDir.length()-1)!='\\'))
+ m_logsDir.append("/");
}
- std::string logfn=sConfig.GetStringDefault("LogFile", "");
- if(!logfn.empty())
- {
- if(sConfig.GetBoolDefault("LogTimestamp",false))
- {
- std::string logTimestamp = GetTimestampStr();
- logTimestamp.insert(0,"_");
- size_t dot_pos = logfn.find_last_of(".");
- if(dot_pos!=logfn.npos)
- logfn.insert(dot_pos,logTimestamp);
- else
- logfn += logTimestamp;
- }
+ m_logsTimestamp = "_" + GetTimestampStr();
- logfile = fopen((logsDir+logfn).c_str(), "w");
- }
+ /// Open specific log files
+ logfile = openLogFile("LogFile","LogTimestamp","w");
- std::string gmlogname = sConfig.GetStringDefault("GMLogFile", "");
- if(!gmlogname.empty())
+ m_gmlog_per_account = sConfig.GetBoolDefault("GmLogPerAccount",false);
+ if(!m_gmlog_per_account)
+ gmLogfile = openLogFile("GMLogFile","GmLogTimestamp","a");
+ else
{
- if(sConfig.GetBoolDefault("GmLogTimestamp",false))
+ // GM log settings for per account case
+ m_gmlog_filename_format = sConfig.GetStringDefault("GMLogFile", "");
+ if(!m_gmlog_filename_format.empty())
{
- std::string gmLogTimestamp = GetTimestampStr();
- gmLogTimestamp.insert(0,"_");
- size_t dot_pos = gmlogname.find_last_of(".");
- if(dot_pos!=gmlogname.npos)
- gmlogname.insert(dot_pos,gmLogTimestamp);
- else
- gmlogname += gmLogTimestamp;
- }
- gmLogfile = fopen((logsDir+gmlogname).c_str(), "a");
- }
+ bool m_gmlog_timestamp = sConfig.GetBoolDefault("GmLogTimestamp",false);
- std::string charlogname = sConfig.GetStringDefault("CharLogFile", "");
- if(!charlogname.empty())
- {
- if(sConfig.GetBoolDefault("CharLogTimestamp",false))
- {
- std::string charLogTimestamp = GetTimestampStr();
- charLogTimestamp.insert(0,"_");
- size_t dot_pos = charlogname.find_last_of(".");
- if(dot_pos!=charlogname.npos)
- charlogname.insert(dot_pos,charLogTimestamp);
+ size_t dot_pos = m_gmlog_filename_format.find_last_of(".");
+ if(dot_pos!=m_gmlog_filename_format.npos)
+ {
+ if(m_gmlog_timestamp)
+ m_gmlog_filename_format.insert(dot_pos,m_logsTimestamp);
+
+ m_gmlog_filename_format.insert(dot_pos,"_#%u");
+ }
else
- charlogname += charLogTimestamp;
+ {
+ m_gmlog_filename_format += "_#%u";
+
+ if(m_gmlog_timestamp)
+ m_gmlog_filename_format += m_logsTimestamp;
+ }
+
+ m_gmlog_filename_format = m_logsDir + m_gmlog_filename_format;
}
- charLogfile = fopen((logsDir+charlogname).c_str(), "a");
}
- std::string dberlogname = sConfig.GetStringDefault("DBErrorLogFile", "");
- if(!dberlogname.empty())
- {
- dberLogfile = fopen((logsDir+dberlogname).c_str(), "a");
- }
- std::string ralogname = sConfig.GetStringDefault("RaLogFile", "");
- if(!ralogname.empty())
- {
- raLogfile = fopen((logsDir+ralogname).c_str(), "a");
- }
+ charLogfile = openLogFile("CharLogFile","CharLogTimestamp","a");
+
+ dberLogfile = openLogFile("DBErrorLogFile",NULL,"a");
+ raLogfile = openLogFile("RaLogFile",NULL,"a");
+
+ // Main log file settings
m_includeTime = sConfig.GetBoolDefault("LogTime", false);
m_logLevel = sConfig.GetIntDefault("LogLevel", 0);
m_logFileLevel = sConfig.GetIntDefault("LogFileLevel", 0);
@@ -256,9 +246,38 @@ void Log::Initialize()
if(sConfig.GetBoolDefault("LogFilter_VisibilityChanges", true))
m_logFilter |= LOG_FILTER_VISIBILITY_CHANGES;
+ // Char log settings
m_charLog_Dump = sConfig.GetBoolDefault("CharLogDump", false);
}
+FILE* Log::openLogFile(char const* configFileName,char const* configTimeStampFlag, char const* mode)
+{
+ std::string logfn=sConfig.GetStringDefault(configFileName, "");
+ if(logfn.empty())
+ return NULL;
+
+ if(configTimeStampFlag && sConfig.GetBoolDefault(configTimeStampFlag,false))
+ {
+ size_t dot_pos = logfn.find_last_of(".");
+ if(dot_pos!=logfn.npos)
+ logfn.insert(dot_pos,m_logsTimestamp);
+ else
+ logfn += m_logsTimestamp;
+ }
+
+ return fopen((m_logsDir+logfn).c_str(), mode);
+}
+
+FILE* Log::openGmlogPerAccount(uint32 account)
+{
+ if(m_gmlog_filename_format.empty())
+ return NULL;
+
+ char namebuf[MAX_PATH];
+ snprintf(namebuf,MAX_PATH,m_gmlog_filename_format.c_str(),account);
+ return fopen(namebuf, "a");
+}
+
void Log::outTimestamp(FILE* file)
{
time_t t = time(NULL);
@@ -577,7 +596,7 @@ void Log::outDebug( const char * str, ... )
fflush(stdout);
}
-void Log::outCommand( const char * str, ... )
+void Log::outCommand( uint32 account, const char * str, ... )
{
if( !str )
return;
@@ -607,7 +626,21 @@ void Log::outCommand( const char * str, ... )
va_end(ap);
fflush(logfile);
}
- if(gmLogfile)
+
+ if (m_gmlog_per_account)
+ {
+ if (FILE* per_file = openGmlogPerAccount (account))
+ {
+ va_list ap;
+ outTimestamp(per_file);
+ va_start(ap, str);
+ vfprintf(per_file, str, ap);
+ fprintf(per_file, "\n" );
+ va_end(ap);
+ fclose(per_file);
+ }
+ }
+ else if (gmLogfile)
{
va_list ap;
outTimestamp(gmLogfile);
@@ -617,6 +650,7 @@ void Log::outCommand( const char * str, ... )
va_end(ap);
fflush(gmLogfile);
}
+
fflush(stdout);
}
diff --git a/src/shared/Log.h b/src/shared/Log.h
index c22c9e6778b..02f996d26c5 100644
--- a/src/shared/Log.h
+++ b/src/shared/Log.h
@@ -58,7 +58,8 @@ const int Color_count = int(WHITE)+1;
class Log : public Trinity::Singleton<Log, Trinity::ClassLevelLockable<Log, ZThread::FastMutex> >
{
friend class Trinity::OperatorNew<Log>;
- Log() : raLogfile(NULL), logfile(NULL), gmLogfile(NULL), charLogfile(NULL), dberLogfile(NULL), m_colored(false) { Initialize(); }
+ Log();
+
~Log()
{
if( logfile != NULL )
@@ -85,7 +86,7 @@ class Log : public Trinity::Singleton<Log, Trinity::ClassLevelLockable<Log, ZThr
void Initialize();
void InitColors(std::string init_str);
void outTitle( const char * str);
- void outCommand( const char * str, ...) ATTR_PRINTF(2,3);
+ void outCommand( uint32 account, const char * str, ...) ATTR_PRINTF(3,4);
void outString(); // any log level
// any log level
void outString( const char * str, ... ) ATTR_PRINTF(2,3);
@@ -120,6 +121,9 @@ class Log : public Trinity::Singleton<Log, Trinity::ClassLevelLockable<Log, ZThr
bool IsOutCharDump() const { return m_charLog_Dump; }
bool IsIncludeTime() const { return m_includeTime; }
private:
+ FILE* openLogFile(char const* configFileName,char const* configTimeStampFlag, char const* mode);
+ FILE* openGmlogPerAccount(uint32 account);
+
FILE* raLogfile;
FILE* logfile;
FILE* gmLogfile;
@@ -134,9 +138,16 @@ class Log : public Trinity::Singleton<Log, Trinity::ClassLevelLockable<Log, ZThr
Color m_colors[4];
uint32 m_logFilter;
+ // cache values for after initilization use (like gm log per account case)
+ std::string m_logsDir;
+ std::string m_logsTimestamp;
+
// char log control
bool m_charLog_Dump;
+ // gm log control
+ bool m_gmlog_per_account;
+ std::string m_gmlog_filename_format;
};
#define sLog Trinity::Singleton<Log>::Instance()
diff --git a/src/shared/Util.h b/src/shared/Util.h
index 690f1ec0ac0..44c0dda8370 100644
--- a/src/shared/Util.h
+++ b/src/shared/Util.h
@@ -172,9 +172,19 @@ inline bool isEastAsianCharacter(wchar_t wchar)
return false;
}
+inline bool isNumeric(wchar_t wchar)
+{
+ return (wchar >= L'0' && wchar <=L'9');
+}
+
+inline bool isNumeric(char c)
+{
+ return (c >= '0' && c <='9');
+}
+
inline bool isNumericOrSpace(wchar_t wchar)
{
- return (wchar >= L'0' && wchar <=L'9') || wchar == L' ';
+ return isNumeric(wchar) || wchar == L' ';
}
inline bool isBasicLatinString(std::wstring wstr, bool numericOrSpace)