diff options
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); |