diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-09-28 19:09:22 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-09-28 19:09:22 +0200 |
commit | 86e5f80837ad55932f2469d79d9e6b6bb07cf5ed (patch) | |
tree | 818ab757a8ae964751190daad5a7fd2cd8f21a04 /src/Core/LogManager.cpp | |
parent | a7a285eb61dd83afc892bc1d64ffe14b9f1426a3 (diff) | |
download | mad-86e5f80837ad55932f2469d79d9e6b6bb07cf5ed.tar mad-86e5f80837ad55932f2469d79d9e6b6bb07cf5ed.zip |
Implemented new ConfigManager
Diffstat (limited to 'src/Core/LogManager.cpp')
-rw-r--r-- | src/Core/LogManager.cpp | 68 |
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); |