mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-03 15:47:04 +01:00
Core/Logging: Try to simplify configuration of loggers and appenders
Changed multiple lines to a simple format: - Logger.name=Type,LogLevel,Flags,AppenderList - Appender.name=Type,LogLevel,Flags,optional1,optional2 * Type = File: optional1 = File name, optiona2 = Mode * Type = Console: optional1 = Colors Created a default set of loggers and appenders. - Root logger defaults to Error, that means you will see nothing on console by default (not even loading) - You need to add the loggers to Loggers options if you want to enable them, otherwise Root logger will be used for all types Restored outSQLDriver (LOG_FILTER_SQL_DRIVER), outSQLDev (LOG_FILTER_SQL_DEV), outArena (LOG_FILTER_ARENA) and outChar (LOG_FILTER_CHARACTER) functionality by creating new types (LOG_FILTER_CHARACTER is a rename of LOG_FILTER_DELETE. Note: You need to update your config file... again (yeah sorry... trying to make it simpler)
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
#include "Log.h"
|
||||
#include "Common.h"
|
||||
#include "Config.h"
|
||||
|
||||
#include "Util.h"
|
||||
#include "AppenderConsole.h"
|
||||
#include "AppenderFile.h"
|
||||
#include "AppenderDB.h"
|
||||
@@ -82,30 +82,66 @@ void Log::CreateAppenderFromConfig(const char* name)
|
||||
if (!name || *name == '\0')
|
||||
return;
|
||||
|
||||
std::string base = "Appender.";
|
||||
base.append(name);
|
||||
base.push_back('.');
|
||||
// Format=type,level,flags,optional1,optional2
|
||||
// if type = File. optional1 = file and option2 = mode
|
||||
// if type = Console. optional1 = Color
|
||||
std::string options = "Appender.";
|
||||
options.append(name);
|
||||
options = ConfigMgr::GetStringDefault(options.c_str(), "");
|
||||
Tokens tokens(options, ',');
|
||||
Tokens::iterator iter = tokens.begin();
|
||||
|
||||
LogLevel level = LogLevel(GetConfigIntDefault(base, "Level", 0));
|
||||
AppenderType type = AppenderType(GetConfigIntDefault(base, "Type", 0));
|
||||
if (tokens.size() < 2)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name, options.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
AppenderFlags flags = APPENDER_FLAGS_NONE;
|
||||
AppenderType type = AppenderType(atoi(*iter));
|
||||
++iter;
|
||||
LogLevel level = LogLevel(atoi(*iter));
|
||||
if (level > LOG_LEVEL_FATAL)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %u for appender %s\n", level, name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (++iter != tokens.end())
|
||||
flags = AppenderFlags(atoi(*iter));
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case APPENDER_CONSOLE:
|
||||
{
|
||||
AppenderFlags flags = AppenderFlags(GetConfigIntDefault(base, "Flags", APPENDER_FLAGS_PREFIX_LOGLEVEL | APPENDER_FLAGS_PREFIX_LOGFILTERTYPE));
|
||||
if (flags == APPENDER_FLAGS_NONE)
|
||||
flags = AppenderFlags(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", ""));
|
||||
if (++iter != tokens.end())
|
||||
appender->InitColors(*iter);
|
||||
//fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel()); // DEBUG - RemoveMe
|
||||
break;
|
||||
}
|
||||
case APPENDER_FILE:
|
||||
{
|
||||
std::string filename = GetConfigStringDefault(base, "File", "");
|
||||
std::string mode = GetConfigStringDefault(base, "Mode", "a");
|
||||
AppenderFlags flags = AppenderFlags(GetConfigIntDefault(base, "Flags", APPENDER_FLAGS_PREFIX_TIMESTAMP | APPENDER_FLAGS_PREFIX_LOGLEVEL | APPENDER_FLAGS_PREFIX_LOGFILTERTYPE));
|
||||
std::string filename;
|
||||
std::string mode = "a";
|
||||
|
||||
if (++iter == tokens.end())
|
||||
{
|
||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags == APPENDER_FLAGS_NONE)
|
||||
flags = AppenderFlags(APPENDER_FLAGS_PREFIX_LOGLEVEL | APPENDER_FLAGS_PREFIX_LOGFILTERTYPE | APPENDER_FLAGS_PREFIX_TIMESTAMP);
|
||||
|
||||
filename = *iter;
|
||||
|
||||
if (++iter != tokens.end())
|
||||
mode = *iter;
|
||||
|
||||
if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
|
||||
{
|
||||
@@ -121,13 +157,14 @@ void Log::CreateAppenderFromConfig(const char* name)
|
||||
//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;
|
||||
}
|
||||
case APPENDER_DB: // TODO Set realm!
|
||||
case APPENDER_DB:
|
||||
{
|
||||
uint8 id = NextAppenderId();
|
||||
appenders[id] = new AppenderDB(id, name, level, realm);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Unknown type %u for appender %s\n", type, name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -137,29 +174,49 @@ void Log::CreateLoggerFromConfig(const char* name)
|
||||
if (!name || *name == '\0')
|
||||
return;
|
||||
|
||||
std::string base = "Logger.";
|
||||
base.append(name);
|
||||
base.push_back('.');
|
||||
LogLevel level = LOG_LEVEL_DISABLED;
|
||||
int32 type = -1;
|
||||
|
||||
LogLevel level = LogLevel(GetConfigIntDefault(base, "Level", 0));
|
||||
int32 type = GetConfigIntDefault(base, "Type", -1);
|
||||
std::string options = "Logger.";
|
||||
options.append(name);
|
||||
options = ConfigMgr::GetStringDefault(options.c_str(), "");
|
||||
|
||||
if (type < 0)
|
||||
Tokens tokens(options, ',');
|
||||
Tokens::iterator iter = tokens.begin();
|
||||
|
||||
if (tokens.size() != 3)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateLoggerFromConfig: Missing entry %sType in config. Logger ignored\n", name);
|
||||
fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong configuration for logger %s. Config line: %s\n", name, options.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
type = atoi(*iter);
|
||||
if (type > MaxLogFilter)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong type %u for logger %s\n", type, name);
|
||||
return;
|
||||
}
|
||||
|
||||
Logger& logger = loggers[type];
|
||||
|
||||
if (!logger.getName().empty())
|
||||
fprintf(stderr, "Error while configuring Logger %s. Replacing (name: %s, Type: %u, Level: %u) with (name: %s, Type: %u, Level: %u)\n",
|
||||
name, logger.getName().c_str(), logger.getType(), logger.getLogLevel(), name, type, level);
|
||||
{
|
||||
fprintf(stderr, "Error while configuring Logger %s. Already defined\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
++iter;
|
||||
level = LogLevel(atoi(*iter));
|
||||
if (level > LOG_LEVEL_FATAL)
|
||||
{
|
||||
fprintf(stderr, "Log::CreateLoggerFromConfig: Wrong Log Level %u for logger %s\n", type, name);
|
||||
return;
|
||||
}
|
||||
|
||||
logger.Create(name, LogFilterType(type), level);
|
||||
//fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Type %u, mask %u\n", name, LogFilterType(type), level); // DEBUG - RemoveMe
|
||||
|
||||
std::istringstream ss(GetConfigStringDefault(base, "Appenders", ""));
|
||||
++iter;
|
||||
std::istringstream ss(*iter);
|
||||
std::string str;
|
||||
|
||||
ss >> str;
|
||||
|
||||
Reference in New Issue
Block a user