mirror of
https://github.com/mangosfour/server.git
synced 2025-12-25 13:37:02 +00:00
[6848] Implement possibility creating gm log per account files using new option in mangosd.conf. Releated cleanups.
This commit is contained in:
parent
d34899097f
commit
4ccfa1e71e
11 changed files with 145 additions and 80 deletions
|
|
@ -36,6 +36,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())
|
||||
|
|
@ -173,73 +180,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())
|
||||
m_logsTimestamp = "_" + GetTimestampStr();
|
||||
|
||||
/// Open specific log files
|
||||
logfile = openLogFile("LogFile","LogTimestamp","w");
|
||||
|
||||
m_gmlog_per_account = sConfig.GetBoolDefault("GmLogPerAccount",false);
|
||||
if(!m_gmlog_per_account)
|
||||
gmLogfile = openLogFile("GMLogFile","GmLogTimestamp","a");
|
||||
else
|
||||
{
|
||||
if(sConfig.GetBoolDefault("LogTimestamp",false))
|
||||
// GM log settings for per account case
|
||||
m_gmlog_filename_format = sConfig.GetStringDefault("GMLogFile", "");
|
||||
if(!m_gmlog_filename_format.empty())
|
||||
{
|
||||
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);
|
||||
bool m_gmlog_timestamp = sConfig.GetBoolDefault("GmLogTimestamp",false);
|
||||
|
||||
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
|
||||
logfn += logTimestamp;
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
logfile = fopen((logsDir+logfn).c_str(), "w");
|
||||
}
|
||||
|
||||
std::string gmlogname = sConfig.GetStringDefault("GMLogFile", "");
|
||||
if(!gmlogname.empty())
|
||||
{
|
||||
if(sConfig.GetBoolDefault("GmLogTimestamp",false))
|
||||
{
|
||||
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");
|
||||
}
|
||||
charLogfile = openLogFile("CharLogFile","CharLogTimestamp","a");
|
||||
|
||||
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);
|
||||
else
|
||||
charlogname += charLogTimestamp;
|
||||
}
|
||||
charLogfile = fopen((logsDir+charlogname).c_str(), "a");
|
||||
}
|
||||
dberLogfile = openLogFile("DBErrorLogFile",NULL,"a");
|
||||
raLogfile = openLogFile("RaLogFile",NULL,"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");
|
||||
}
|
||||
// Main log file settings
|
||||
m_includeTime = sConfig.GetBoolDefault("LogTime", false);
|
||||
m_logLevel = sConfig.GetIntDefault("LogLevel", 0);
|
||||
m_logFileLevel = sConfig.GetIntDefault("LogFileLevel", 0);
|
||||
|
|
@ -254,9 +244,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);
|
||||
|
|
@ -575,7 +594,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;
|
||||
|
|
@ -605,7 +624,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);
|
||||
|
|
@ -615,6 +648,7 @@ void Log::outCommand( const char * str, ... )
|
|||
va_end(ap);
|
||||
fflush(gmLogfile);
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,8 @@ const int Color_count = int(WHITE)+1;
|
|||
class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ZThread::FastMutex> >
|
||||
{
|
||||
friend class MaNGOS::OperatorNew<Log>;
|
||||
Log() : raLogfile(NULL), logfile(NULL), gmLogfile(NULL), charLogfile(NULL), dberLogfile(NULL), m_colored(false) { Initialize(); }
|
||||
Log();
|
||||
|
||||
~Log()
|
||||
{
|
||||
if( logfile != NULL )
|
||||
|
|
@ -83,7 +84,7 @@ class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ZThrea
|
|||
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);
|
||||
|
|
@ -118,6 +119,9 @@ class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ZThrea
|
|||
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;
|
||||
|
|
@ -132,9 +136,16 @@ class Log : public MaNGOS::Singleton<Log, MaNGOS::ClassLevelLockable<Log, ZThrea
|
|||
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 MaNGOS::Singleton<Log>::Instance()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "6847"
|
||||
#define REVISION_NR "6848"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue