diff options
author | Yehonal <hw.2@hotmail.it> | 2016-06-26 10:39:44 +0200 |
---|---|---|
committer | Yehonal <hw.2@hotmail.it> | 2016-06-26 10:39:44 +0200 |
commit | e8e94a0a663be0a1cefe704d8c6860a526b2d7e9 (patch) | |
tree | 7dae238916ecc5d4adc8af0a235a3501a1a536a6 /src/server/shared/Logging/Log.h |
For Azeroth!
Diffstat (limited to 'src/server/shared/Logging/Log.h')
-rw-r--r-- | src/server/shared/Logging/Log.h | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h new file mode 100644 index 0000000000..d8939d7db6 --- /dev/null +++ b/src/server/shared/Logging/Log.h @@ -0,0 +1,206 @@ +/* + * Copyright (C) + * Copyright (C) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef SUNWELLCORE_LOG_H +#define SUNWELLCORE_LOG_H + +#include "Common.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 +}; + +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 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* 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_charLog_Dump; + bool m_charLog_Dump_Separate; + std::string m_dumpsDir; + + DebugLogFilters m_DebugLogMask; +}; + +#define sLog ACE_Singleton<Log, ACE_Thread_Mutex>::instance() + +#endif + |