+ else if (level == "verbose")
+ {
+ loglevel = VERBOSE;
+ }
+ else if (level == "default")
+ {
+ loglevel = DEFAULT;
+ }
+ else if (level == "sparse")
+ {
+ loglevel = SPARSE;
+ }
+ else if (level == "none")
+ {
+ loglevel = NONE;
+ }
+ FileWriter* fw;
+ std::string target = tag->getString("target");
+ std::map<std::string, FileWriter*>::iterator fwi = logmap.find(target);
+ if (fwi == logmap.end())
+ {
+ char realtarget[MAXBUF];
+ time_t time = ServerInstance->Time();
+ struct tm *mytime = gmtime(&time);
+ strftime(realtarget, MAXBUF, target.c_str(), mytime);
+ FILE* f = fopen(realtarget, "a");
+ fw = new FileWriter(f);
+ logmap.insert(std::make_pair(target, fw));
+ }
+ else
+ {
+ fw = fwi->second;
+ }
+ FileLogStream* fls = new FileLogStream(loglevel, fw);
+ AddLogTypes(type, fls, true);
+ }
+}
+
+void LogManager::CloseLogs()
+{
+ std::map<std::string, std::vector<LogStream*> >().swap(LogStreams); /* Clear it */
+ std::map<LogStream*, std::vector<std::string> >().swap(GlobalLogStreams); /* Clear it */
+ for (std::map<LogStream*, int>::iterator i = AllLogStreams.begin(); i != AllLogStreams.end(); ++i)
+ {
+ delete i->first;
+ }
+ std::map<LogStream*, int>().swap(AllLogStreams); /* And clear it */
+}