aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-08-05 15:38:25 +0200
committerSpp <spp@jorge.gr>2012-08-05 15:38:25 +0200
commit3f42094b9c563d2b2d5f2dfe43d8d47c9114f71f (patch)
treee38215aa0398edec5539f032d32ada7556d75bca
parent0b98656b2878e1a6f644e1cd8b7745370efc488b (diff)
Core/Logging: Add option to remove timestamp, Log Level and Log Filter Type from logged msgs
- Appender config option .Timestamp and .Backup became obsolete - New Appender config option .Flags added Appender Console prefixes Log Level and Log Filter Type to the logged text as default Appender File prefixes Timestamp, Log Level and Log Filter Type to the logged text as default
-rw-r--r--src/server/authserver/authserver.conf.dist19
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp2
-rw-r--r--src/server/shared/Logging/Appender.cpp48
-rw-r--r--src/server/shared/Logging/Appender.h21
-rw-r--r--src/server/shared/Logging/AppenderConsole.cpp10
-rw-r--r--src/server/shared/Logging/AppenderConsole.h2
-rw-r--r--src/server/shared/Logging/AppenderFile.cpp11
-rw-r--r--src/server/shared/Logging/AppenderFile.h2
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp11
-rw-r--r--src/server/worldserver/worldserver.conf.dist19
11 files changed, 100 insertions, 47 deletions
diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist
index d77b40e6591..30a319237a6 100644
--- a/src/server/authserver/authserver.conf.dist
+++ b/src/server/authserver/authserver.conf.dist
@@ -206,16 +206,15 @@ LoginDatabase.WorkerThreads = 1
# Default: a - (Append)
# w - (Overwrite)
#
-# Appender.name.Backup
-# Description: Make a backup of existing file before overwrite
-# (Only used with Mode = w)
-# Default: 0 - false
-# 1 - true
-#
-# Appender.name.Timestamp
-# Description: Append timestamp to the log file name.
-# Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-# (Only used with Type = 2)
+# Appender.name.Flags
+# Description:
+# Default: Console = 6, File = 7, DB = 0
+# 0 - None
+# 1 - Prefix Timestamp to the text
+# 2 - Prefix Log Level to the text
+# 4 - Prefix Log Filter type to the text
+# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
+# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
#
# Logger config values: Given a logger "name" the following options
# can be read:
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index df515f879f8..9aecf3c4c25 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -1006,7 +1006,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder)
SendNotification(LANG_GM_ON);
std::string IP_str = GetRemoteAddress();
- sLog->outDebug(LOG_FILTER_PLAYER, "Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d",
+ sLog->outInfo(LOG_FILTER_PLAYER_LOADING, "Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d",
GetAccountId(), IP_str.c_str(), pCurrChar->GetName(), pCurrChar->GetGUIDLow(), pCurrChar->getLevel());
if (!pCurrChar->IsStandState() && !pCurrChar->HasUnitState(UNIT_STATE_STUNNED))
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 6e45ebf37c1..6fdbf8a5358 100755
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -534,7 +534,7 @@ void WorldSession::LogoutPlayer(bool Save)
// e.g if he got disconnected during a transfer to another map
// calls to GetMap in this case may cause crashes
_player->CleanupsBeforeDelete();
- sLog->outDebug(LOG_FILTER_PLAYER, "Account: %d (IP: %s) Logout Character:[%s] (GUID: %u) Level: %d", GetAccountId(), GetRemoteAddress().c_str(), _player->GetName(), _player->GetGUIDLow(), _player->getLevel());
+ sLog->outInfo(LOG_FILTER_PLAYER_LOADING, "Account: %d (IP: %s) Logout Character:[%s] (GUID: %u) Level: %d", GetAccountId(), GetRemoteAddress().c_str(), _player->GetName(), _player->GetGUIDLow(), _player->getLevel());
if (Map* _map = _player->FindMap())
_map->RemovePlayerFromMap(_player, true);
diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp
index 0b92e74c1e9..db7857064df 100644
--- a/src/server/shared/Logging/Appender.cpp
+++ b/src/server/shared/Logging/Appender.cpp
@@ -31,8 +31,8 @@ std::string LogMessage::getTimeStr()
return getTimeStr(mtime);
}
-Appender::Appender(uint8 _id, std::string const& _name, AppenderType _type /* = APPENDER_NONE*/, LogLevel _level /* = LOG_LEVEL_DISABLED */):
-id(_id), name(_name), type(_type), level(_level)
+Appender::Appender(uint8 _id, std::string const& _name, AppenderType _type /* = APPENDER_NONE*/, LogLevel _level /* = LOG_LEVEL_DISABLED */, AppenderFlags _flags /* = APPENDER_FLAGS_NONE */):
+id(_id), name(_name), type(_type), level(_level), flags(_flags)
{
}
@@ -60,6 +60,11 @@ LogLevel Appender::getLogLevel() const
return level;
}
+AppenderFlags Appender::getFlags() const
+{
+ return flags;
+}
+
void Appender::setLogLevel(LogLevel _level)
{
level = _level;
@@ -67,9 +72,40 @@ void Appender::setLogLevel(LogLevel _level)
void Appender::write(LogMessage& message)
{
- if (level && level <= message.level)
- _write(message);
- //else fprintf(stderr, "Appender::write: Appender %s, Level %s. Msg %s Level %s Type %s WRONG LEVEL MASK\n", getName().c_str(), getLogLevelString(level), message.text.c_str(), getLogLevelString(message.level), getLogFilterTypeString(message.type)); // DEBUG - RemoveMe
+ if (!level || level > message.level)
+ {
+ //fprintf(stderr, "Appender::write: Appender %s, Level %s. Msg %s Level %s Type %s WRONG LEVEL MASK\n", getName().c_str(), getLogLevelString(level), message.text.c_str(), getLogLevelString(message.level), getLogFilterTypeString(message.type)); // DEBUG - RemoveMe
+ return;
+ }
+
+ message.prefix.clear();
+ if (flags & APPENDER_FLAGS_PREFIX_TIMESTAMP)
+ message.prefix.append(message.getTimeStr().c_str());
+
+ if (flags & APPENDER_FLAGS_PREFIX_LOGLEVEL)
+ {
+ if (!message.prefix.empty())
+ message.prefix.push_back(' ');
+
+ char text[MAX_QUERY_LEN];
+ snprintf(text, MAX_QUERY_LEN, "%-5s", Appender::getLogLevelString(message.level));
+ message.prefix.append(text);
+ }
+
+ if (flags & APPENDER_FLAGS_PREFIX_LOGFILTERTYPE)
+ {
+ if (!message.prefix.empty())
+ message.prefix.push_back(' ');
+
+ char text[MAX_QUERY_LEN];
+ snprintf(text, MAX_QUERY_LEN, "[%-15s]", Appender::getLogFilterTypeString(message.type));
+ message.prefix.append(text);
+ }
+
+ if (!message.prefix.empty())
+ message.prefix.push_back(' ');
+
+ _write(message);
}
const char* Appender::getLogLevelString(LogLevel level)
@@ -163,6 +199,8 @@ char const* Appender::getLogFilterTypeString(LogFilterType type)
return "WORLDSERVER";
case LOG_FILTER_GAMEEVENTS:
return "GAMEEVENTS";
+ case LOG_FILTER_CALENDAR:
+ return "CALENDAR";
default:
break;
}
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index 3105f0e6bb4..429a685d4ee 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -85,9 +85,23 @@ enum AppenderType
APPENDER_DB,
};
+enum AppenderFlags
+{
+ APPENDER_FLAGS_NONE = 0x00,
+ APPENDER_FLAGS_PREFIX_TIMESTAMP = 0x01,
+ APPENDER_FLAGS_PREFIX_LOGLEVEL = 0x02,
+ APPENDER_FLAGS_PREFIX_LOGFILTERTYPE = 0x04,
+ APPENDER_FLAGS_USE_TIMESTAMP = 0x08, // only used by FileAppender
+ APPENDER_FLAGS_MAKE_FILE_BACKUP = 0x10 // only used by FileAppender
+};
+
struct LogMessage
{
- LogMessage(LogLevel _level, LogFilterType _type, std::string _text): level(_level), type(_type), text(_text)
+ LogMessage(LogLevel _level, LogFilterType _type, std::string _text)
+ : level(_level)
+ , type(_type)
+ , text(_text)
+ , param1(0)
{
mtime = time(NULL);
}
@@ -98,6 +112,7 @@ struct LogMessage
LogLevel level;
LogFilterType type;
std::string text;
+ std::string prefix;
uint32 param1;
time_t mtime;
};
@@ -105,13 +120,14 @@ struct LogMessage
class Appender
{
public:
- Appender(uint8 _id, std::string const& name, AppenderType type = APPENDER_NONE, LogLevel level = LOG_LEVEL_DISABLED);
+ Appender(uint8 _id, std::string const& name, AppenderType type = APPENDER_NONE, LogLevel level = LOG_LEVEL_DISABLED, AppenderFlags flags = APPENDER_FLAGS_NONE);
virtual ~Appender();
uint8 getId() const;
std::string const& getName() const;
AppenderType getType() const;
LogLevel getLogLevel() const;
+ AppenderFlags getFlags() const;
void setLogLevel(LogLevel);
void write(LogMessage& message);
@@ -125,6 +141,7 @@ class Appender
std::string name;
AppenderType type;
LogLevel level;
+ AppenderFlags flags;
};
typedef std::map<uint8, Appender*> AppenderMap;
diff --git a/src/server/shared/Logging/AppenderConsole.cpp b/src/server/shared/Logging/AppenderConsole.cpp
index 30c7cc4d135..839f8512ad7 100644
--- a/src/server/shared/Logging/AppenderConsole.cpp
+++ b/src/server/shared/Logging/AppenderConsole.cpp
@@ -21,9 +21,11 @@
#include <sstream>
-AppenderConsole::AppenderConsole(uint8 id, std::string const& name, LogLevel level):
-Appender(id, name, APPENDER_CONSOLE, level), _colored(false), _colors()
+AppenderConsole::AppenderConsole(uint8 id, std::string const& name, LogLevel level, AppenderFlags flags):
+Appender(id, name, APPENDER_CONSOLE, level, flags), _colored(false)
{
+ for (uint8 i = 0; i < MaxLogLevels; ++i)
+ _colors[i] = ColorTypes(MaxColors);
}
void AppenderConsole::InitColors(std::string const& str)
@@ -183,9 +185,9 @@ void AppenderConsole::_write(LogMessage& message)
}
SetColor(stdout_stream, _colors[index]);
- utf8printf(stdout_stream ? stdout : stderr, "%s %-5s [%-15s] %s", message.getTimeStr().c_str(), Appender::getLogLevelString(message.level), Appender::getLogFilterTypeString(message.type), message.text.c_str());
+ utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str());
ResetColor(stdout_stream);
}
else
- utf8printf(stdout_stream ? stdout : stderr, "%s %-5s [%-15s] %s", message.getTimeStr().c_str(), Appender::getLogLevelString(message.level), Appender::getLogFilterTypeString(message.type), message.text.c_str());
+ utf8printf(stdout_stream ? stdout : stderr, "%s%s", message.prefix.c_str(), message.text.c_str());
}
diff --git a/src/server/shared/Logging/AppenderConsole.h b/src/server/shared/Logging/AppenderConsole.h
index b81fe6dde57..ad7d9543cdb 100644
--- a/src/server/shared/Logging/AppenderConsole.h
+++ b/src/server/shared/Logging/AppenderConsole.h
@@ -45,7 +45,7 @@ const uint8 MaxColors = uint8(WHITE) + 1;
class AppenderConsole: public Appender
{
public:
- AppenderConsole(uint8 _id, std::string const& name, LogLevel level);
+ AppenderConsole(uint8 _id, std::string const& name, LogLevel level, AppenderFlags flags);
void InitColors(const std::string& init_str);
private:
diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp
index cb875240c46..d66771b9055 100644
--- a/src/server/shared/Logging/AppenderFile.cpp
+++ b/src/server/shared/Logging/AppenderFile.cpp
@@ -18,16 +18,16 @@
#include "AppenderFile.h"
#include "Common.h"
-AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, bool _backup)
- : Appender(id, name, APPENDER_FILE, level)
+AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags)
+ : Appender(id, name, APPENDER_FILE, level, _flags)
, filename(_filename)
, logDir(_logDir)
, mode(_mode)
- , backup(_backup)
{
dynamicName = std::string::npos != filename.find("%u");
+ backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP;
if (!dynamicName)
- logfile = OpenFile(_filename, _mode, _backup);
+ logfile = OpenFile(_filename, _mode, backup);
}
AppenderFile::~AppenderFile()
@@ -50,8 +50,7 @@ void AppenderFile::_write(LogMessage& message)
if (logfile)
{
- fprintf(logfile, "%s %-5s [%-15s] %s", message.getTimeStr().c_str(), Appender::getLogLevelString(message.level), Appender::getLogFilterTypeString(message.type), message.text.c_str());
-
+ fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str());
fflush(logfile);
if (dynamicName)
diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h
index 8d8b0c43a54..e9cb858f625 100644
--- a/src/server/shared/Logging/AppenderFile.h
+++ b/src/server/shared/Logging/AppenderFile.h
@@ -23,7 +23,7 @@
class AppenderFile: public Appender
{
public:
- AppenderFile(uint8 _id, std::string const& _name, LogLevel level, const char* filename, const char* logDir, const char* mode, bool backup);
+ AppenderFile(uint8 _id, std::string const& _name, LogLevel level, const char* filename, const char* logDir, const char* mode, AppenderFlags flags);
~AppenderFile();
FILE* OpenFile(std::string const& _name, std::string const& _mode, bool _backup);
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index 2ced38847be..0bf8bcded86 100755
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -103,7 +103,8 @@ void Log::CreateAppenderFromConfig(const char* name)
{
case APPENDER_CONSOLE:
{
- AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level);
+ AppenderFlags flags = AppenderFlags(GetConfigIntDefault(base, "Flags", APPENDER_FLAGS_PREFIX_LOGLEVEL | APPENDER_FLAGS_PREFIX_LOGFILTERTYPE));
+ AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
appenders[appender->getId()] = appender;
appender->InitColors(GetConfigStringDefault(base, "Colors", ""));
@@ -114,10 +115,9 @@ void Log::CreateAppenderFromConfig(const char* name)
{
std::string filename = GetConfigStringDefault(base, "File", "");
std::string mode = GetConfigStringDefault(base, "Mode", "a");
- std::string timestamp = GetConfigStringDefault(base, "Timestamp", "");
- bool backup = GetConfigIntDefault(base, "Backup", 0);
+ AppenderFlags flags = AppenderFlags(GetConfigIntDefault(base, "Flags", APPENDER_FLAGS_PREFIX_TIMESTAMP | APPENDER_FLAGS_PREFIX_LOGLEVEL | APPENDER_FLAGS_PREFIX_LOGFILTERTYPE));
- if (!timestamp.empty())
+ if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
{
size_t dot_pos = filename.find_last_of(".");
if (dot_pos != filename.npos)
@@ -127,7 +127,7 @@ void Log::CreateAppenderFromConfig(const char* name)
}
uint8 id = NextAppenderId();
- appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), backup);
+ appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags);
//fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type FILE, Mask %u, File %s, Mode %s\n", name, id, level, filename.c_str(), mode.c_str()); // DEBUG - RemoveMe
break;
}
@@ -228,7 +228,6 @@ void Log::EnableDBAppenders()
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
if (it->second && it->second->getType() == APPENDER_DB)
((AppenderDB *)it->second)->setEnable(true);
-
}
void Log::log(LogFilterType filter, LogLevel level, char const* str, ...)
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 614d7f95eb2..f31326b104a 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -2637,16 +2637,15 @@ PlayerDump.DisallowOverwrite = 1
# Default: a - (Append)
# w - (Overwrite)
#
-# Appender.name.Backup
-# Description: Make a backup of existing file before overwrite
-# (Only used with Mode = w)
-# Default: 0 - false
-# 1 - true
-#
-# Appender.name.Timestamp
-# Description: Append timestamp to the log file name.
-# Logname_YYYY-MM-DD_HH-MM-SS.Ext for Logname.Ext
-# (Only used with Type = 2)
+# Appender.name.Flags
+# Description:
+# Default: Console = 6, File = 7, DB = 0
+# 0 - None
+# 1 - Prefix Timestamp to the text
+# 2 - Prefix Log Level to the text
+# 4 - Prefix Log Filter type to the text
+# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
+# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
#
# Logger config values: Given a logger "name" the following options
# can be read: