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.cpp148
1 files changed, 91 insertions, 57 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);
}