summaryrefslogtreecommitdiff
path: root/src/core/Logging/Log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/Logging/Log.h')
-rw-r--r--src/core/Logging/Log.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/core/Logging/Log.h b/src/core/Logging/Log.h
new file mode 100644
index 0000000000..d534b92ec7
--- /dev/null
+++ b/src/core/Logging/Log.h
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: http://github.com/azerothcore/azerothcore-wotlk/LICENSE-GPL2
+ * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
+ */
+
+#ifndef AZEROTHCORE_LOG_H
+#define AZEROTHCORE_LOG_H
+
+#include "Common.h"
+#include <ace/Task.h>
+#include <ace/Singleton.h>
+
+class WorldPacket;
+
+enum DebugLogFilters
+{
+ LOG_FILTER_NONE = 0x00000000,
+ LOG_FILTER_UNITS = 0x00000001, // Anything related to units that doesn't fit in other categories. ie. creature formations
+ LOG_FILTER_PETS = 0x00000002,
+ LOG_FILTER_VEHICLES = 0x00000004,
+ LOG_FILTER_TSCR = 0x00000008, // C++ AI, instance scripts, etc.
+ LOG_FILTER_DATABASE_AI = 0x00000010, // SmartAI, EventAI, CreatureAI
+ LOG_FILTER_MAPSCRIPTS = 0x00000020,
+ LOG_FILTER_NETWORKIO = 0x00000040, // Anything packet/netcode related
+ LOG_FILTER_SPELLS_AURAS = 0x00000080,
+ LOG_FILTER_ACHIEVEMENTSYS = 0x00000100,
+ LOG_FILTER_CONDITIONSYS = 0x00000200,
+ LOG_FILTER_POOLSYS = 0x00000400,
+ LOG_FILTER_AUCTIONHOUSE = 0x00000800,
+ LOG_FILTER_BATTLEGROUND = 0x00001000, // Anything related to arena's and battlegrounds
+ LOG_FILTER_OUTDOORPVP = 0x00002000,
+ LOG_FILTER_CHATSYS = 0x00004000,
+ LOG_FILTER_LFG = 0x00008000,
+ LOG_FILTER_MAPS = 0x00010000, // Maps, instances, grids, cells, visibility
+ LOG_FILTER_PLAYER_LOADING = 0x00020000, // Debug output from Player::_Load functions
+ LOG_FILTER_PLAYER_ITEMS = 0x00040000, // Anything item related
+ LOG_FILTER_PLAYER_SKILLS = 0x00080000, // Skills related
+ LOG_FILTER_LOOT = 0x00100000, // Loot related
+ LOG_FILTER_GUILD = 0x00200000, // Guild related
+ LOG_FILTER_TRANSPORTS = 0x00400000, // Transport related
+ LOG_FILTER_WARDEN = 0x00800000, // Warden related
+ LOG_FILTER_BATTLEFIELD = 0x01000000, // Battlefield related
+ LOG_FILTER_MODULES = 0x02000000, // Modules debug
+};
+
+enum LogTypes
+{
+ LOG_TYPE_STRING = 0,
+ LOG_TYPE_ERROR = 1,
+ LOG_TYPE_BASIC = 2,
+ LOG_TYPE_DETAIL = 3,
+ LOG_TYPE_DEBUG = 4,
+ LOG_TYPE_CHAR = 5,
+ LOG_TYPE_WORLD = 6,
+ LOG_TYPE_RA = 7,
+ LOG_TYPE_GM = 8,
+ LOG_TYPE_CRASH = 9,
+ LOG_TYPE_CHAT = 10,
+ LOG_TYPE_PERF = 11,
+ LOG_TYPE_MULTITH= 12,
+ MAX_LOG_TYPES
+};
+
+enum LogLevel
+{
+ LOGL_NORMAL = 0,
+ LOGL_BASIC,
+ LOGL_DETAIL,
+ LOGL_DEBUG
+};
+
+const int LogLevels = int(LOGL_DEBUG)+1;
+
+enum ColorTypes
+{
+ BLACK,
+ RED,
+ GREEN,
+ BROWN,
+ BLUE,
+ MAGENTA,
+ CYAN,
+ GREY,
+ YELLOW,
+ LRED,
+ LGREEN,
+ LBLUE,
+ LMAGENTA,
+ LCYAN,
+ WHITE
+};
+
+const int Colors = int(WHITE)+1;
+
+class Log
+{
+ friend class ACE_Singleton<Log, ACE_Thread_Mutex>;
+
+ private:
+ Log();
+ ~Log();
+
+ public:
+ void Initialize();
+
+ void ReloadConfig();
+
+ void InitColors(const std::string& init_str);
+ void SetColor(bool stdout_stream, ColorTypes color);
+ void ResetColor(bool stdout_stream);
+
+ void outDB(LogTypes type, const char * str);
+ void outString(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outString();
+ void outStringInLine(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outError(const char * err, ...) ATTR_PRINTF(2, 3);
+ void outCrash(const char * err, ...) ATTR_PRINTF(2, 3);
+ void outBasic(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outDetail(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outSQLDev(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outDebug(DebugLogFilters f, const char* str, ...) ATTR_PRINTF(3, 4);
+ void outStaticDebug(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outErrorDb(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outChar(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outCommand(uint32 account, const char * str, ...) ATTR_PRINTF(3, 4);
+ void outChat(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outRemote(const char * str, ...) ATTR_PRINTF(2, 3);
+ void outSQLDriver(const char* str, ...) ATTR_PRINTF(2, 3);
+ void outMisc(const char * str, ...) ATTR_PRINTF(2, 3); // pussywizard
+ void outCharDump(const char * str, uint32 account_id, uint32 guid, const char * name);
+
+ static void outTimestamp(FILE* file);
+ static std::string GetTimestampStr();
+
+ void SetLogLevel(char * Level);
+ void SetLogFileLevel(char * Level);
+ void SetSQLDriverQueryLogging(bool newStatus) { m_sqlDriverQueryLogging = newStatus; }
+ void SetRealmID(uint32 id) { realm = id; }
+
+ bool IsOutDebug() const { return m_logLevel > 2 || (m_logFileLevel > 2 && logfile); }
+ bool IsOutCharDump() const { return m_charLog_Dump; }
+
+ bool GetLogDB() const { return m_enableLogDB; }
+ void SetLogDB(bool enable) { m_enableLogDB = enable; }
+ bool GetSQLDriverQueryLogging() const { return m_sqlDriverQueryLogging; }
+ private:
+ FILE* openLogFile(char const* configFileName, char const* configTimeStampFlag, char const* mode);
+ FILE* openGmlogPerAccount(uint32 account);
+
+ FILE* raLogfile;
+ FILE* logfile;
+ FILE* gmLogfile;
+ FILE* charLogfile;
+ FILE* dberLogfile;
+ FILE* chatLogfile;
+ FILE* sqlLogFile;
+ FILE* sqlDevLogFile;
+ FILE* miscLogFile;
+
+ // cache values for after initilization use (like gm log per account case)
+ std::string m_logsDir;
+ std::string m_logsTimestamp;
+
+ // gm log control
+ bool m_gmlog_per_account;
+ std::string m_gmlog_filename_format;
+
+ bool m_enableLogDB;
+ uint32 realm;
+
+ // log coloring
+ bool m_colored;
+ ColorTypes m_colors[4];
+
+ // log levels:
+ // false: errors only, true: full query logging
+ bool m_sqlDriverQueryLogging;
+
+ // log levels:
+ // 0 minimum/string, 1 basic/error, 2 detail, 3 full/debug
+ uint8 m_dbLogLevel;
+ uint8 m_logLevel;
+ uint8 m_logFileLevel;
+ bool m_dbChar;
+ bool m_dbRA;
+ bool m_dbGM;
+ bool m_dbChat;
+ bool m_charLog_Dump;
+ bool m_charLog_Dump_Separate;
+ std::string m_dumpsDir;
+
+ DebugLogFilters m_DebugLogMask;
+};
+
+#define sLog ACE_Singleton<Log, ACE_Thread_Mutex>::instance()
+
+#endif
+