/* */ #include "LogFactory.h" #include "SimpleLogFormatter.h" #include "a2io.h" #include "prefs.h" #include "RecoverableException.h" namespace aria2 { std::string LogFactory::filename_ = DEV_NULL; Logger* LogFactory::logger_ = 0; bool LogFactory::consoleOutput_ = true; Logger::LEVEL LogFactory::logLevel_ = Logger::A2_DEBUG; void LogFactory::openLogger(Logger* logger) { if(filename_ != DEV_NULL) { // don't open file DEV_NULL for performance sake. // This avoids costly unecessary message formatting and write. logger->openFile(filename_); } logger->setLogLevel(logLevel_); } void LogFactory::reconfigure() { if(logger_) { logger_->closeFile(); try { openLogger(logger_); } catch(RecoverableException& e) { logger_->closeFile(); throw; } } } Logger* LogFactory::getInstance() { if(!logger_) { Logger* slogger = new Logger(); slogger->setLogFormatter(new SimpleLogFormatter()); try { openLogger(slogger); } catch(RecoverableException& e) { delete slogger; throw; } if(consoleOutput_) { slogger->setStdoutLogLevel(Logger::A2_NOTICE, true); slogger->setStdoutLogLevel(Logger::A2_WARN, true); slogger->setStdoutLogLevel(Logger::A2_ERROR, true); } logger_ = slogger; } return logger_; } void LogFactory::setLogFile(const std::string& name) { if(name == "-") { filename_ = DEV_STDOUT; } else if(name == "") { filename_ = DEV_NULL; } else { filename_ = name; } } void LogFactory::setLogLevel(Logger::LEVEL level) { logLevel_ = level; } void LogFactory::setLogLevel(const std::string& level) { if(level == V_DEBUG) { logLevel_ = Logger::A2_DEBUG; } else if(level == V_INFO) { logLevel_ = Logger::A2_INFO; } else if(level == V_NOTICE) { logLevel_ = Logger::A2_NOTICE; } else if(level == V_WARN) { logLevel_ = Logger::A2_WARN; } else if(level == V_ERROR) { logLevel_ = Logger::A2_ERROR; } } void LogFactory::release() { delete logger_; logger_ = 0; } } // namespace aria2