mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 10:26:28 +01:00
Core/Logging: Minor changes
- Select stderr when writing ERROR and FATAL messages - Simplify function defines - Fix `logs` table structure with latest logging changes
This commit is contained in:
@@ -224,7 +224,7 @@ DROP TABLE IF EXISTS `logs`;
|
||||
CREATE TABLE `logs` (
|
||||
`time` int(10) unsigned NOT NULL,
|
||||
`realm` int(10) unsigned NOT NULL,
|
||||
`type` tinyint(3) unsigned NOT NULL,
|
||||
`type` varchar(250),
|
||||
`level` tinyint(3) unsigned NOT NULL DEFAULT '0',
|
||||
`string` text CHARACTER SET latin1
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
2
sql/updates/auth/2013_11_11_00_auth_logs.sql
Normal file
2
sql/updates/auth/2013_11_11_00_auth_logs.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE `logs` CHANGE `type` `type` varchar(250);
|
||||
|
||||
@@ -441,7 +441,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
|
||||
case SMART_EVENT_VICTIM_CASTING:
|
||||
if (e.event.targetCasting.spellId > 0 && !sSpellMgr->GetSpellInfo(e.event.targetCasting.spellId))
|
||||
{
|
||||
sLog->outError("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Spell entry %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell);
|
||||
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses non-existent Spell entry %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ struct LogMessage
|
||||
///@ Returns size of the log message content in bytes
|
||||
uint32 Size() const
|
||||
{
|
||||
return prefix.size() + text.size();
|
||||
return static_cast<uint32>(prefix.size() + text.size());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ void AppenderConsole::InitColors(std::string const& str)
|
||||
|
||||
void AppenderConsole::SetColor(bool stdout_stream, ColorTypes color)
|
||||
{
|
||||
#if PLATFORM == PLATFORM_WINDOWS
|
||||
#if PLATFORM == PLATFORM_WINDOWS
|
||||
static WORD WinColorFG[MaxColors] =
|
||||
{
|
||||
0, // BLACK
|
||||
@@ -87,7 +87,7 @@ void AppenderConsole::SetColor(bool stdout_stream, ColorTypes color)
|
||||
|
||||
HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
|
||||
SetConsoleTextAttribute(hConsole, WinColorFG[color]);
|
||||
#else
|
||||
#else
|
||||
enum ANSITextAttr
|
||||
{
|
||||
TA_NORMAL = 0,
|
||||
@@ -156,7 +156,7 @@ void AppenderConsole::ResetColor(bool stdout_stream)
|
||||
|
||||
void AppenderConsole::_write(LogMessage const& message)
|
||||
{
|
||||
bool stdout_stream = message.level == LOG_LEVEL_ERROR || message.level == LOG_LEVEL_FATAL;
|
||||
bool stdout_stream = !(message.level == LOG_LEVEL_ERROR || message.level == LOG_LEVEL_FATAL);
|
||||
|
||||
if (_colored)
|
||||
{
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
*/
|
||||
|
||||
#include "AppenderFile.h"
|
||||
#include "Common.h"
|
||||
|
||||
#if PLATFORM == PLATFORM_WINDOWS
|
||||
# include <Windows.h>
|
||||
#endif
|
||||
|
||||
AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags, uint64 fileSize):
|
||||
Appender(id, name, APPENDER_FILE, level, _flags),
|
||||
@@ -28,7 +31,7 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, co
|
||||
fileSize(0)
|
||||
{
|
||||
dynamicName = std::string::npos != filename.find("%s");
|
||||
backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP;
|
||||
backup = (_flags & APPENDER_FLAGS_MAKE_FILE_BACKUP) != 0;
|
||||
|
||||
logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL;
|
||||
}
|
||||
|
||||
@@ -75,9 +75,11 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
// if type = File. optional1 = file and option2 = mode
|
||||
// if type = Console. optional1 = Color
|
||||
std::string options = sConfigMgr->GetStringDefault(appenderName.c_str(), "");
|
||||
|
||||
Tokenizer tokens(options, ',');
|
||||
Tokenizer::const_iterator iter = tokens.begin();
|
||||
uint8 size = tokens.size();
|
||||
|
||||
size_t size = tokens.size();
|
||||
std::string name = appenderName.substr(9);
|
||||
|
||||
if (size < 2)
|
||||
@@ -87,8 +89,9 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
}
|
||||
|
||||
AppenderFlags flags = APPENDER_FLAGS_NONE;
|
||||
AppenderType type = AppenderType(atoi(*iter));
|
||||
LogLevel level = LogLevel(atoi(*(++iter)));
|
||||
AppenderType type = AppenderType(atoi(*iter++));
|
||||
LogLevel level = LogLevel(atoi(*iter++));
|
||||
|
||||
if (level > LOG_LEVEL_FATAL)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name.c_str());
|
||||
@@ -96,7 +99,7 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
}
|
||||
|
||||
if (size > 2)
|
||||
flags = AppenderFlags(atoi(*(++iter)));
|
||||
flags = AppenderFlags(atoi(*iter++));
|
||||
|
||||
switch (type)
|
||||
{
|
||||
@@ -105,7 +108,7 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
|
||||
appenders[appender->getId()] = appender;
|
||||
if (size > 3)
|
||||
appender->InitColors(*(++iter));
|
||||
appender->InitColors(*iter++);
|
||||
//fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel());
|
||||
break;
|
||||
}
|
||||
@@ -120,10 +123,10 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
return;
|
||||
}
|
||||
|
||||
filename = *(++iter);
|
||||
filename = *iter++;
|
||||
|
||||
if (size > 4)
|
||||
mode = *(++iter);
|
||||
mode = *iter++;
|
||||
|
||||
if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
|
||||
{
|
||||
@@ -136,7 +139,7 @@ void Log::CreateAppenderFromConfig(std::string const& appenderName)
|
||||
|
||||
uint64 maxFileSize = 0;
|
||||
if (size > 5)
|
||||
maxFileSize = atoi(*(++iter));
|
||||
maxFileSize = atoi(*iter++);
|
||||
|
||||
uint8 id = NextAppenderId();
|
||||
appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize);
|
||||
@@ -188,7 +191,7 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
|
||||
return;
|
||||
}
|
||||
|
||||
level = LogLevel(atoi(*iter));
|
||||
level = LogLevel(atoi(*iter++));
|
||||
if (level > LOG_LEVEL_FATAL)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong Log Level %u for logger %s\n", type, name.c_str());
|
||||
@@ -198,7 +201,6 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
|
||||
logger.Create(name, level);
|
||||
//fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level);
|
||||
|
||||
++iter;
|
||||
std::istringstream ss(*iter);
|
||||
std::string str;
|
||||
|
||||
@@ -320,69 +322,10 @@ bool Log::SetLogLevel(std::string const& name, const char* newLevelc, bool isLog
|
||||
|
||||
appender->setLogLevel(newLevel);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Log::outTrace(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_TRACE, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outDebug(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_DEBUG, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outInfo(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_INFO, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outWarn(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_WARN, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outError(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_ERROR, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outFatal(std::string const& filter, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, LOG_LEVEL_FATAL, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void Log::outCharDump(char const* str, uint32 accountId, uint32 guid, char const* name)
|
||||
{
|
||||
if (!str || !ShouldLog("entities.player.dump", LOG_LEVEL_INFO))
|
||||
@@ -453,6 +396,7 @@ void Log::LoadFromConfig()
|
||||
if (!m_logsDir.empty())
|
||||
if ((m_logsDir.at(m_logsDir.length() - 1) != '/') && (m_logsDir.at(m_logsDir.length() - 1) != '\\'))
|
||||
m_logsDir.push_back('/');
|
||||
|
||||
ReadAppendersFromConfig();
|
||||
ReadLoggersFromConfig();
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
|
||||
#include "Define.h"
|
||||
#include "Appender.h"
|
||||
#include "LogWorker.h"
|
||||
#include "Logger.h"
|
||||
#include "LogWorker.h"
|
||||
#include "Dynamic/UnorderedMap.h"
|
||||
|
||||
#include <string>
|
||||
@@ -46,20 +46,15 @@ class Log
|
||||
bool ShouldLog(std::string const& type, LogLevel level) const;
|
||||
bool SetLogLevel(std::string const& name, char const* level, bool isLogger = true);
|
||||
|
||||
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 outMessage(std::string const& f, LogLevel level, char const* str, ...) ATTR_PRINTF(4, 5);
|
||||
|
||||
void outCommand(uint32 account, const char * str, ...) ATTR_PRINTF(3, 4);
|
||||
void outCharDump(char const* str, uint32 account_id, uint32 guid, char const* name);
|
||||
static std::string GetTimestampStr();
|
||||
|
||||
void SetRealmId(uint32 id);
|
||||
|
||||
private:
|
||||
static std::string GetTimestampStr();
|
||||
void vlog(std::string const& f, LogLevel level, char const* str, va_list argptr);
|
||||
void write(LogMessage* msg) const;
|
||||
|
||||
@@ -112,41 +107,51 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
|
||||
return logLevel != LOG_LEVEL_DISABLED && logLevel <= level;
|
||||
}
|
||||
|
||||
inline void Log::outMessage(std::string const& filter, LogLevel level, const char * str, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, str);
|
||||
|
||||
vlog(filter, level, str, ap);
|
||||
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
#define sLog ACE_Singleton<Log, ACE_Thread_Mutex>::instance()
|
||||
|
||||
#if COMPILER != COMPILER_MICROSOFT
|
||||
#define TC_LOG_MESSAGE_BODY(level__, call__, filterType__, ...) \
|
||||
do { \
|
||||
if (sLog->ShouldLog(filterType__, level__)) \
|
||||
sLog->call__(filterType__, __VA_ARGS__); \
|
||||
#define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \
|
||||
do { \
|
||||
if (sLog->ShouldLog(filterType__, level__)) \
|
||||
sLog->outMessage(filterType__, level__, __VA_ARGS__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define TC_LOG_MESSAGE_BODY(level__, call__, filterType__, ...) \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable:4127)) \
|
||||
do { \
|
||||
if (sLog->ShouldLog(filterType__, level__)) \
|
||||
sLog->call__(filterType__, __VA_ARGS__); \
|
||||
} while (0) \
|
||||
#define TC_LOG_MESSAGE_BODY(filterType__, level__, ...) \
|
||||
__pragma(warning(push)) \
|
||||
__pragma(warning(disable:4127)) \
|
||||
do { \
|
||||
if (sLog->ShouldLog(filterType__, level__)) \
|
||||
sLog->outMessage(filterType__, level__, __VA_ARGS__); \
|
||||
} while (0) \
|
||||
__pragma(warning(pop))
|
||||
#endif
|
||||
|
||||
#define TC_LOG_TRACE(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_TRACE, outTrace, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_TRACE, __VA_ARGS__)
|
||||
|
||||
#define TC_LOG_DEBUG(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_DEBUG, outDebug, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_DEBUG, __VA_ARGS__)
|
||||
|
||||
#define TC_LOG_INFO(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_INFO, outInfo, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_INFO, __VA_ARGS__)
|
||||
|
||||
#define TC_LOG_WARN(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_WARN, outWarn, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_WARN, __VA_ARGS__)
|
||||
|
||||
#define TC_LOG_ERROR(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_ERROR, outError, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_ERROR, __VA_ARGS__)
|
||||
|
||||
#define TC_LOG_FATAL(filterType__, ...) \
|
||||
TC_LOG_MESSAGE_BODY(LOG_LEVEL_FATAL, outFatal, filterType__, __VA_ARGS__)
|
||||
TC_LOG_MESSAGE_BODY(filterType__, LOG_LEVEL_FATAL, __VA_ARGS__)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -25,13 +25,6 @@ void Logger::Create(std::string const& _name, LogLevel _level)
|
||||
level = _level;
|
||||
}
|
||||
|
||||
Logger::~Logger()
|
||||
{
|
||||
for (AppenderMap::iterator it = appenders.begin(); it != appenders.end(); ++it)
|
||||
it->second = NULL;
|
||||
appenders.clear();
|
||||
}
|
||||
|
||||
std::string const& Logger::getName() const
|
||||
{
|
||||
return name;
|
||||
@@ -49,12 +42,7 @@ void Logger::addAppender(uint8 id, Appender* appender)
|
||||
|
||||
void Logger::delAppender(uint8 id)
|
||||
{
|
||||
AppenderMap::iterator it = appenders.find(id);
|
||||
if (it != appenders.end())
|
||||
{
|
||||
it->second = NULL;
|
||||
appenders.erase(it);
|
||||
}
|
||||
appenders.erase(id);
|
||||
}
|
||||
|
||||
void Logger::setLogLevel(LogLevel _level)
|
||||
@@ -66,7 +54,7 @@ void Logger::write(LogMessage& message) const
|
||||
{
|
||||
if (!level || level > message.level || message.text.empty())
|
||||
{
|
||||
//fprintf(stderr, "Logger::write: Logger %s, Level %u. Msg %s Level %u WRONG LEVEL MASK OR EMPTY MSG\n", getName().c_str(), messge.level, message.text.c_str(), .message.level); // DEBUG - RemoveMe
|
||||
//fprintf(stderr, "Logger::write: Logger %s, Level %u. Msg %s Level %u WRONG LEVEL MASK OR EMPTY MSG\n", getName().c_str(), getLogLevel(), message.text.c_str(), message.level);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ class Logger
|
||||
{
|
||||
public:
|
||||
Logger();
|
||||
~Logger();
|
||||
|
||||
void Create(std::string const& name, LogLevel level);
|
||||
void addAppender(uint8 type, Appender *);
|
||||
|
||||
Reference in New Issue
Block a user