summaryrefslogtreecommitdiffstats
path: root/src/Core/LogManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Core/LogManager.cpp')
-rw-r--r--src/Core/LogManager.cpp68
1 files changed, 32 insertions, 36 deletions
diff --git a/src/Core/LogManager.cpp b/src/Core/LogManager.cpp
index 7282009..955ac76 100644
--- a/src/Core/LogManager.cpp
+++ b/src/Core/LogManager.cpp
@@ -53,17 +53,17 @@ LogManager::MessageLevel LogManager::parseLevel(const String &str) throw (Except
if(str.isEmpty())
return Logger::LOG_DEFAULT;
- if(str.caseCompare(DEBUG_LEVEL, 0) == 0)
+ if(str.matches(DEBUG_LEVEL))
return Logger::LOG_DEBUG;
- else if(str.caseCompare(VERBOSE_LEVEL, 0) == 0)
+ else if(str.matches(VERBOSE_LEVEL))
return Logger::LOG_VERBOSE;
- else if(str.caseCompare(DEFAULT_LEVEL, 0) == 0)
+ else if(str.matches(DEFAULT_LEVEL))
return Logger::LOG_DEFAULT;
- else if(str.caseCompare(WARNING_LEVEL, 0) == 0)
+ else if(str.matches(WARNING_LEVEL))
return Logger::LOG_WARNING;
- else if(str.caseCompare(ERROR_LEVEL, 0) == 0)
+ else if(str.matches(ERROR_LEVEL))
return Logger::LOG_ERROR;
- else if(str.caseCompare(CRITICAL_LEVEL, 0) == 0)
+ else if(str.matches(CRITICAL_LEVEL))
return Logger::LOG_CRITICAL;
else
throw Exception(Exception::INVALID_INPUT);
@@ -79,41 +79,37 @@ LogManager::~LogManager() {
}
-bool LogManager::handleConfigEntry(const ConfigEntry &entry, bool handled) {
- if(entry[0].getKey().matches("Log")) {
- if(entry[0][0].matches("Console")) {
- if(entry[1].isEmpty()) {
- registerLogger(consoleLogger);
- return true;
- }
- else if(entry[1].getKey().matches("Level")) {
- if(entry[2].isEmpty()) {
- try {
- if(entry[1][0].matches("remote"))
- consoleLogger->setRemoteLevel(parseLevel(entry[1][1]));
- else
- consoleLogger->setLevel(parseLevel(entry[1][0]));
- }
- catch(Core::Exception e) {
- application->logf(Logger::LOG_WARNING, "Unknown log level '%s'.", entry[1][0].toLocale().c_str());
- }
-
- return true;
- }
- }
+void LogManager::configure() {
+ std::vector<const ConfigEntry*> entries = application->getConfigManager()->getEntries("Log");
+
+ for(std::vector<const ConfigEntry*>::iterator entry = entries.begin(); entry != entries.end(); ++entry) {
+ const std::vector<String> &values = (*entry)->getValues();
+
+ if(values.empty() || !values.front().matches("Console"))
+ continue;
+
+ registerLogger(consoleLogger);
+
+ bool remote = false;
+ for(std::vector<String>::const_iterator value = values.begin()+1; value != values.end(); ++value) {
+ if(value->matches("remote"))
+ remote = true;
}
- else if(entry[1].isEmpty()) {
- if(!handled) {
- application->logf(Logger::LOG_WARNING, "Unknown logger '%s'.", entry[0][0].toLocale().c_str());
- return true;
+
+ String level = (*entry)->get("Level");
+ if(!level.isEmpty()) {
+ try {
+ if(remote)
+ consoleLogger->setRemoteLevel(parseLevel(level));
+ else
+ consoleLogger->setLevel(parseLevel(level));
+ }
+ catch(Core::Exception e) {
+ application->logf(Logger::LOG_WARNING, "Unknown log level '%s'.", level.toLocale().c_str());
}
}
}
- return false;
-}
-
-void LogManager::configFinished() {
if(loggers.empty())
registerLogger(consoleLogger);