void LoggerXmlParser::parseLogFile(Element* style) { this->loggerStyle = LoggerManager::LOGFILE; ticpp::Iterator< ticpp::Node > child; child = child.begin(style); while (child != child.end()) { Element* elem; string nameElem; string nameAtt; string valueStr; if (child.Get()->Type() == TiXmlNode::COMMENT) { child++; continue; /* It's a comment... just ignore*/ } child->GetValue(&nameElem); if (nameElem != "styleParam") { throw LoggerException( "Error during parser xmlFile. A invalid element was found in a Style.", "cpputil::Logger::LoggerXmlParser", "void parseLogFile(Element*)"); } elem = child->ToElement(); nameAtt = elem->GetAttribute("name"); if (nameAtt == "writemode") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\twritemode= " << valueStr << endl; #endif if (valueStr == "overwrite") { writemode = LoggerLogFile::OVERWRITE_FILE; } else if (valueStr == "append") { writemode = LoggerLogFile::APPEND_FILE; } else { throw LoggerException( "Error during parser xmlFile. A invalid writemode was specified.", "cpputil::Logger::LoggerXmlParser", "void parseLogFile(Element*)"); } } else if (nameAtt == "filename") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tfilename= " << valueStr << endl; #endif logfileName = valueStr; } else { throw LoggerException( "Error during parser xmlFile. A invalid parameter for logfile style was found.", "cpputil::Logger::LoggerXmlParser", "void parseLogFile(Element*)"); } child++; } }
void LoggerXmlParser::parseBlockedClasses(Element* blockedClasses) { ticpp::Iterator< ticpp::Node > child; child = child.begin(blockedClasses); while (child != child.end()) { string name; string value; if (child.Get()->Type() == TiXmlNode::COMMENT) { child++; continue; /* It's a comment... just ignore*/ } child->GetValue(&name); if (name == "class") { child->ToElement()->GetText(&value); #ifdef PARSER_DEBUG cout << "\t\t\tclassName= " << value << endl; #endif this->blockedClasses->insert(value); } else { throw LoggerException( "Error during parser xmlFile. A invalid element was found in a BlockedClasses.", "cpputil::Logger::LoggerXmlParser", "void parseBlockedClasses(Element*)"); } child++; } }
FileHandler::FileHandler(std::string filename_):jlogger:: StreamHandler() { jcommon::Object::SetClassName("jlogger::FileHandler"); try { _file = new jio::File(filename_); } catch (jcommon::RuntimeException & e) { throw LoggerException(e.what()); } }
void Logger::unregisterClass(Loggable *loggable) { map<Loggable*, string>::iterator it; it = loggableMap->find(loggable); if (it == loggableMap->end()) { throw LoggerException( "Trying to unregister a not registrad Loggable instance!", "cpputil::logger::Logger", "unregisterClass(Loggable*)"); } loggableMap->erase(it); }
Logger::Logger(LoggerLvl loggerLvl) { if (loggerLvl > FATAL || loggerLvl < TRACE) { throw LoggerException( "Trying to set a invalid logger level value!", "cpputil::logger::Logger", "[Constructor] Logger(LoggerLvl)"); } this->loggerLvl = loggerLvl; loggableMap = new map<Loggable*, string>(); logManager = NULL; }
void Logger::registerClass(Loggable* loggable, string completeClassName) { map<Loggable*, string>::iterator it; it = loggableMap->find(loggable); if (it != loggableMap->end()) { throw LoggerException( "Trying to register the same Loggable instance twice!", "cpputil::logger::Logger", "registerClass(Loggable*, string)"); } //TODO: verificar se o nome da classe é válido loggableMap->insert(pair<Loggable*, string>(loggable, completeClassName) ); }
LoggerManager::RegionalOpt LoggerManager::stringToRegionalOpt(string str) { string aux = Functions::toUpperCase(str); if (aux == "USA") { return LoggerManager::USA; } else if (aux == "BRAZIL") { return LoggerManager::BRAZIL; } else { throw LoggerException( "Trying to covert a invalid string to RegionalOpt", "cpputil::logger::LoggerManager", "stringToRegionalOpt(string)"); } }
LoggerColor::Color LoggerColor::stringToColor(string str) { if (str == "black" || str== "BLACK") { return LoggerColor::BLACK; } else if (str == "red" || str== "RED") { return LoggerColor::RED; } else if (str == "green" || str== "GREEN") { return LoggerColor::GREEN; } else if (str == "brown" || str== "BROWN") { return LoggerColor::BROWN; } else if (str == "blue" || str== "BLUE") { return LoggerColor::BLUE; } else if (str == "magenta" || str== "MAGENTA") { return LoggerColor::MAGENTA; } else if (str == "cyan" || str== "CYAN") { return LoggerColor::CYAN; } else if (str == "gray" || str== "GRAY") { return LoggerColor::GRAY; } else if (str == "dark_gray" || str== "DARK_GRAY") { return LoggerColor::DARK_GRAY; } else if (str == "light_red" || str== "LIGHT_RED") { return LoggerColor::LIGHT_RED; } else if (str == "light_green" || str== "LIGHT_GREEN") { return LoggerColor::LIGHT_GREEN; } else if (str == "yellow" || str== "YELLOW") { return LoggerColor::YELLOW; } else if (str == "light_blue" || str== "LIGHT_BLUE") { return LoggerColor::LIGHT_BLUE; } else if (str == "light_magenta" || str== "LIGHT_MAGENTA") { return LoggerColor::LIGHT_MAGENTA; } else if (str == "light_cyan" || str== "LIGHT_CYAN") { return LoggerColor::LIGHT_CYAN; } else if (str == "white" || str== "WHITE") { return LoggerColor::WHITE; } else if (str == "default" || str== "DEFAULT") { return LoggerColor::DEFAULT; } else { throw LoggerException( "Trying to convert a invalid string.", "cpputil::logger::Logger", "stringToLoggerLvl(string)"); } }
LoggerManager::LoggerStyle LoggerManager::stringToLoggerStyle(string str) { string aux = Functions::toUpperCase(str); if (aux == "DEFAULT") { return LoggerManager::DEFAULT; } else if (aux == "NETWORKSTREAM") { return LoggerManager::NETWORKSTREAM; } else if (aux == "LOGFILE") { return LoggerManager::LOGFILE; } else if (aux == "COLOR") { return LoggerManager::COLOR; } else if (aux == "MULTILOGGER") { return LoggerManager::MULTILOGGER; } else { throw LoggerException( "Trying to covert a invalid string to Logger Style", "cpputil::logger::LoggerManager", "stringToLoggerStyle(string)"); } }
Logger::LoggerLvl Logger::stringToLoggerLvl(string str) { if (str == "trace" || str== "TRACE") { return Logger::TRACE; } else if (str == "debug" || str== "DEBUG") { return Logger::DEBUG; } else if (str == "info" || str== "INFO") { return Logger::INFO; } else if (str == "warning" || str== "WARNING") { return Logger::WARNING; } else if (str == "error" || str== "ERROR") { return Logger::ERROR; } else if (str == "fatal" || str== "FATAL") { return Logger::TRACE; } else { throw LoggerException( "Trying to convert a invalid string.", "cpputil::logger::Logger", "stringToLoggerLvl(string)"); } }
void LoggerXmlParser::parseColor(Element* style) { this->loggerStyle = LoggerManager::COLOR; colors = LoggerColor::getDefaultColors(); ticpp::Iterator< ticpp::Node > child; child = child.begin(style); while (child != child.end()) { Element* elem; string nameElem; string nameAtt; string valueStr; int valueInt; if (child.Get()->Type() == TiXmlNode::COMMENT) { child++; continue; /* It's a comment... just ignore*/ } child->GetValue(&nameElem); if (nameElem != "styleParam") { throw LoggerException( "Error during parser xmlFile. A invalid element was found in a Style.", "cpputil::Logger::LoggerXmlParser", "void parseNetworkStream(Element*)"); } elem = child->ToElement(); nameAtt = elem->GetAttribute("name"); if (nameAtt == "traceColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\ttraceColor= " << valueStr << endl; #endif colors[(int) Logger::TRACE] = LoggerColor::stringToColor(valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tcolor after translate= " << LoggerColor::colorToString(colors[(int) Logger::TRACE]) << endl; #endif } else if (nameAtt == "debugColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tdebugColor= " << valueStr << endl; #endif colors[(int) Logger::DEBUG] = LoggerColor::stringToColor(valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tdebug after translate= " << LoggerColor::colorToString(colors[(int) Logger::DEBUG]) << endl; #endif } else if (nameAtt == "infoColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tinfoColor= " << valueStr << endl; #endif colors[(int) Logger::INFO] = LoggerColor::stringToColor(valueStr); } else if (nameAtt == "warningColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\twarningColor= " << valueStr << endl; #endif colors[(int) Logger::WARNING] = LoggerColor::stringToColor(valueStr); } else if (nameAtt == "errorColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\terrorColor= " << valueStr << endl; #endif colors[(int) Logger::ERROR] = LoggerColor::stringToColor(valueStr); } else if (nameAtt == "fatalColor") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tfatalColor= " << valueStr << endl; #endif colors[(int) Logger::FATAL] = LoggerColor::stringToColor(valueStr); } else { throw LoggerException( "Error during parser xmlFile. A invalid parameter for networkstream style was found.", "cpputil::Logger::LoggerXmlParser", "void parseNetworkStream(Element*)"); } child++; } }
void LoggerXmlParser::parseNetworkStream(Element* style) { this->loggerStyle = LoggerManager::NETWORKSTREAM; ticpp::Iterator< ticpp::Node > child; child = child.begin(style); while (child != child.end()) { Element* elem; string nameElem; string nameAtt; string valueStr; int valueInt; if (child.Get()->Type() == TiXmlNode::COMMENT) { child++; continue; /* It's a comment... just ignore*/ } child->GetValue(&nameElem); if (nameElem != "styleParam") { throw LoggerException( "Error during parser xmlFile. A invalid element was found in a Style.", "cpputil::Logger::LoggerXmlParser", "void parseNetworkStream(Element*)"); } elem = child->ToElement(); nameAtt = elem->GetAttribute("name"); if (nameAtt == "protocol") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tprotocol= " << valueStr << endl; #endif if (valueStr == "udp") { protocol = LoggerNetworkStream::UDP; } else if (valueStr == "tcp") { protocol = LoggerNetworkStream::TCP; } else { throw LoggerException( "Error during parser xmlFile. A invalid network protocol was specified.", "cpputil::Logger::LoggerXmlParser", "void parseNetworkStream(Element*)"); } } else if (nameAtt == "ipAddress") { elem->GetText(&valueStr); #ifdef PARSER_DEBUG cout << "\t\t\tipAddress= " << valueStr << endl; #endif ipAddress = valueStr; } else if (nameAtt == "portNumber") { elem->GetText(&valueInt); #ifdef PARSER_DEBUG cout << "\t\t\tportNumber= " << valueInt << endl; #endif portNumber = valueInt; } else { throw LoggerException( "Error during parser xmlFile. A invalid parameter for networkstream style was found.", "cpputil::Logger::LoggerXmlParser", "void parseNetworkStream(Element*)"); } child++; } }
void LoggerXmlParser::parseDocument() { bool hadFoundClasses = false; bool hadFoundStyle = false; string aux; try { Document doc(xmlFileName); doc.LoadFile(); Element* first = doc.FirstChildElement(); first->GetValue(&aux); #ifdef PARSER_DEBUG cout << "\tFirstElement=" << aux << endl; #endif if (aux != "LoggerConfig") { throw LoggerException( "Error during parser xmlFile. Not found root element LoggerConfig.", "cpputil::Logger::LoggerXmlParser", "void parseDocument()"); } if (first->HasAttribute("level")) { string value = first->GetAttribute("level"); loggerLvl = Logger::stringToLoggerLvl(value); #ifdef PARSER_DEBUG cout <<"\t\tlevel=" << value << endl; cout <<"\t\tlvl After been translated= " << Logger::loggerLvlToString(loggerLvl) << endl; #endif } if (first->HasAttribute("region")) { string value = first->GetAttribute("region"); regionalOpt = LoggerManager::stringToRegionalOpt(value); #ifdef PARSER_DEBUG cout <<"\t\tregionalOpt= " << value << endl; cout <<"\t\tregionOpt After been translated= " << LoggerManager::regionalOptToString(regionalOpt) << endl; #endif } ticpp::Iterator< ticpp::Node > child; child = child.begin(first); while (child != child.end()) { string name; if (child.Get()->Type() == TiXmlNode::COMMENT) { child++; continue; /* It's a comment... just ignore*/ } child->GetValue(&name); #ifdef PARSER_DEBUG cout <<"\n\tElement name=" << name << endl; #endif if (name == "BlockedClasses" && !hadFoundClasses) { hadFoundClasses = true; Element* blockedClasses = child->ToElement(); parseBlockedClasses(blockedClasses); } else if (name == "Style" && !hadFoundStyle) { hadFoundStyle = true; Element* style = child->ToElement(); if (style->HasAttribute("name")) { string valeuAttName = style->GetAttribute("name"); #ifdef PARSER_DEBUG cout <<"\t\tStyle name=" << valeuAttName << endl; #endif if (valeuAttName == "default") { parseDefault(style); } else if (valeuAttName == "networkstream") { parseNetworkStream(style); } else if (valeuAttName == "logfile") { this->parseLogFile(style); } else if (valeuAttName == "color") { parseColor(style); } else if (valeuAttName == "multilogger") { //TODO: Implementar o multilogger } else { throw LoggerException( "Error during parser xmlFile. A invalid style name specified.", "cpputil::Logger::LoggerXmlParser", "void parseDocument()"); } } else { throw LoggerException( "Error during parser xmlFile. Name attbribute was no specified in Style.", "cpputil::Logger::LoggerXmlParser", "void parseDocument()"); } } else { throw LoggerException( "Error during parser xmlFile. A invalid or duplicated element was found.", "cpputil::Logger::LoggerXmlParser", "void parseDocument()"); } child++; } } catch (ticpp::Exception& ex) { cerr << ex.what() << endl; resetDefault(); throw ex; } }