aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Log.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared/Logging/Log.cpp')
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp107
1 files changed, 82 insertions, 25 deletions
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index cce670922f4..c9ba159cdea 100755
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -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();
+
+ if (tokens.size() < 2)
+ {
+ fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name, options.c_str());
+ return;
+ }
- LogLevel level = LogLevel(GetConfigIntDefault(base, "Level", 0));
- AppenderType type = AppenderType(GetConfigIntDefault(base, "Type", 0));
+ 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;
+ }
- switch(type)
+ 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;
}
- Logger& logger = loggers[type];
+ 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;