aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-08-06 12:10:33 +0200
committerSpp <spp@jorge.gr>2012-08-06 12:10:33 +0200
commit97c4b92eb02fc673d1230aadaee23aa7827a9761 (patch)
tree1fc94866072ff473b48282e2fe36be4a6845cd46 /src/server/shared/Logging
parent5746b688fa156f2ea3a72a8f655042c24bdae8c4 (diff)
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)
Diffstat (limited to 'src/server/shared/Logging')
-rw-r--r--src/server/shared/Logging/Appender.cpp10
-rw-r--r--src/server/shared/Logging/Appender.h7
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp107
3 files changed, 95 insertions, 29 deletions
diff --git a/src/server/shared/Logging/Appender.cpp b/src/server/shared/Logging/Appender.cpp
index abb2649c468..be30a54ff02 100644
--- a/src/server/shared/Logging/Appender.cpp
+++ b/src/server/shared/Logging/Appender.cpp
@@ -201,8 +201,14 @@ char const* Appender::getLogFilterTypeString(LogFilterType type)
return "GAMEEVENTS";
case LOG_FILTER_CALENDAR:
return "CALENDAR";
- case LOG_FILTER_PLAYER_DELETE:
- return "PLAYER_DELETE";
+ case LOG_FILTER_CHARACTER:
+ return "CHARACTER";
+ case LOG_FILTER_ARENAS:
+ return "ARENAS";
+ case LOG_FILTER_SQL_DRIVER:
+ return "SQL DRIVER";
+ case LOG_FILTER_SQL_DEV:
+ return "SQL DEV";
default:
break;
}
diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h
index 323da3f2be8..7d7375a1edb 100644
--- a/src/server/shared/Logging/Appender.h
+++ b/src/server/shared/Logging/Appender.h
@@ -59,10 +59,13 @@ enum LogFilterType
LOG_FILTER_WORLDSERVER,
LOG_FILTER_GAMEEVENTS,
LOG_FILTER_CALENDAR,
- LOG_FILTER_PLAYER_DELETE
+ LOG_FILTER_CHARACTER,
+ LOG_FILTER_ARENAS,
+ LOG_FILTER_SQL_DRIVER,
+ LOG_FILTER_SQL_DEV
};
-const uint8 MaxLogFilter = uint8(LOG_FILTER_PLAYER_DELETE) + 1;
+const uint8 MaxLogFilter = uint8(LOG_FILTER_SQL_DEV) + 1;
// Values assigned have their equivalent in enum ACE_Log_Priority
enum LogLevel
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;