mirror of
https://github.com/araxiaonline/TrinityCore2.git
synced 2026-06-13 03:22:40 -04:00
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
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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, ...)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user