aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Logging/Log.h')
-rw-r--r--src/server/shared/Logging/Log.h111
1 files changed, 88 insertions, 23 deletions
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h
index e35e4f3ab7f..81daee02503 100644
--- a/src/server/shared/Logging/Log.h
+++ b/src/server/shared/Logging/Log.h
@@ -28,11 +28,60 @@
#include <string>
#include <ace/Singleton.h>
+// TODO: Replace all defines in core
+#define LOG_FILTER_ACHIEVEMENTSYS "achievement"
+#define LOG_FILTER_AUCTIONHOUSE "auctionHouse"
+#define LOG_FILTER_ARENAS "bg.arena"
+#define LOG_FILTER_BATTLEFIELD "bg.battlefield"
+#define LOG_FILTER_BATTLEGROUND "bg.battleground"
+#define LOG_FILTER_PLAYER_CHATLOG "chat.log"
+#define LOG_FILTER_CALENDAR "calendar"
+#define LOG_FILTER_CHATSYS "chat.system"
+#define LOG_FILTER_CHEAT "cheat"
+#define LOG_FILTER_REMOTECOMMAND "commands.ra"
+#define LOG_FILTER_GMCOMMAND "commands.gm"
+#define LOG_FILTER_CONDITIONSYS "condition"
+#define LOG_FILTER_PETS "entities.pet"
+#define LOG_FILTER_CHARACTER "entities.player.character"
+#define LOG_FILTER_PLAYER_DUMP "entities.player.dump"
+#define LOG_FILTER_PLAYER "entities.player"
+#define LOG_FILTER_PLAYER_ITEMS "entities.player.items"
+#define LOG_FILTER_PLAYER_LOADING "entities.player.loading"
+#define LOG_FILTER_PLAYER_SKILLS "entities.player.skills"
+#define LOG_FILTER_TRANSPORTS "entities.transport"
+#define LOG_FILTER_UNITS "entities.unit"
+#define LOG_FILTER_VEHICLES "entities.vehicle"
+#define LOG_FILTER_GAMEEVENTS "gameevent"
+#define LOG_FILTER_GUILD "guild"
+#define LOG_FILTER_LFG "lfg"
+#define LOG_FILTER_LOOT "loot"
+#define LOG_FILTER_MAPSCRIPTS "maps.script"
+#define LOG_FILTER_MAPS "maps"
+#define LOG_FILTER_GENERAL "misc"
+#define LOG_FILTER_NETWORKIO "network"
+#define LOG_FILTER_OPCODES "network.opcode"
+#define LOG_FILTER_SOAP "network.soap"
+#define LOG_FILTER_OUTDOORPVP "outdoorpvp"
+#define LOG_FILTER_POOLSYS "pool"
+#define LOG_FILTER_RBAC "rbac"
+#define LOG_FILTER_TSCR "scripts"
+#define LOG_FILTER_DATABASE_AI "scripts.ai"
+#define LOG_FILTER_SERVER_LOADING "server.loading"
+#define LOG_FILTER_AUTHSERVER "server.authserver"
+#define LOG_FILTER_WORLDSERVER "server.worldserver"
+#define LOG_FILTER_SPELLS_AURAS "spells"
+#define LOG_FILTER_SQL_DEV "sql.dev"
+#define LOG_FILTER_SQL_DRIVER "sql.driver"
+#define LOG_FILTER_SQL "sql.sql"
+#define LOG_FILTER_WARDEN "warden"
+
+#define LOGGER_ROOT "root"
+
class Log
{
friend class ACE_Singleton<Log, ACE_Thread_Mutex>;
- typedef UNORDERED_MAP<uint8, Logger> LoggerMap;
+ typedef UNORDERED_MAP<std::string, Logger> LoggerMap;
private:
Log();
@@ -41,15 +90,15 @@ class Log
public:
void LoadFromConfig();
void Close();
- bool ShouldLog(LogFilterType type, LogLevel level) const;
+ bool ShouldLog(std::string const& type, LogLevel level) const;
bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true);
- void outTrace(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
- void outDebug(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
- void outInfo(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
- void outWarn(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
- void outError(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
- void outFatal(LogFilterType f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outTrace(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outDebug(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outInfo(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outWarn(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outError(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
+ void outFatal(std::string const& f, char const* str, ...) ATTR_PRINTF(3, 4);
void outCommand(uint32 account, const char * str, ...) ATTR_PRINTF(3, 4);
void outCharDump(char const* str, uint32 account_id, uint32 guid, char const* name);
@@ -58,14 +107,14 @@ class Log
void SetRealmId(uint32 id);
private:
- void vlog(LogFilterType f, LogLevel level, char const* str, va_list argptr);
- void write(LogMessage* msg);
+ void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr);
+ void write(LogMessage* msg) const;
- Logger* GetLoggerByType(LogFilterType filter);
+ Logger const* GetLoggerByType(std::string const& type) const;
Appender* GetAppenderByName(std::string const& name);
uint8 NextAppenderId();
- void CreateAppenderFromConfig(const char* name);
- void CreateLoggerFromConfig(const char* name);
+ void CreateAppenderFromConfig(std::string const& name);
+ void CreateLoggerFromConfig(std::string const& name);
void ReadAppendersFromConfig();
void ReadLoggersFromConfig();
@@ -79,19 +128,35 @@ class Log
LogWorker* worker;
};
-inline bool Log::ShouldLog(LogFilterType type, LogLevel level) const
+inline Logger const* Log::GetLoggerByType(std::string const& type) const
{
- LoggerMap::const_iterator it = loggers.find(uint8(type));
+ LoggerMap::const_iterator it = loggers.find(type);
if (it != loggers.end())
- {
- LogLevel logLevel = it->second.getLogLevel();
- return logLevel != LOG_LEVEL_DISABLED && logLevel <= level;
- }
-
- if (type != LOG_FILTER_GENERAL)
- return ShouldLog(LOG_FILTER_GENERAL, level);
- else
+ return &(it->second);
+
+ if (type == LOGGER_ROOT)
+ return NULL;
+
+ std::string parentLogger = LOGGER_ROOT;
+ size_t found = type.find_last_of(".");
+ if (found != std::string::npos)
+ parentLogger = type.substr(0,found);
+
+ return GetLoggerByType(parentLogger);
+}
+
+inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
+{
+ // TODO: Use cache to store "Type.sub1.sub2": "Type" equivalence, should
+ // Speed up in cases where requesting "Type.sub1.sub2" but only configured
+ // Logger "Type"
+
+ Logger const* logger = GetLoggerByType(type);
+ if (!logger)
return false;
+
+ LogLevel logLevel = logger->getLogLevel();
+ return logLevel != LOG_LEVEL_DISABLED && logLevel <= level;
}
#define sLog ACE_Singleton<Log, ACE_Thread_Mutex>::instance()