FEI Version of the Day
fei_LogManager.cpp
00001 /*--------------------------------------------------------------------*/
00002 /*    Copyright 2005 Sandia Corporation.                              */
00003 /*    Under the terms of Contract DE-AC04-94AL85000, there is a       */
00004 /*    non-exclusive license for use of this work by or on behalf      */
00005 /*    of the U.S. Government.  Export of this program may require     */
00006 /*    a license from the United States Government.                    */
00007 /*--------------------------------------------------------------------*/
00008 
00009 #include <fei_utils.hpp>
00010 #include <fei_LogManager.hpp>
00011 #include <fei_Logger.hpp>
00012 #include <fei_LogFile.hpp>
00013 
00014 fei::LogManager::LogManager()
00015  : output_level_(NONE),
00016    output_path_("./"),
00017    loggers_()
00018 {
00019 }
00020 
00021 fei::LogManager::~LogManager()
00022 {
00023 }
00024 
00025 fei::LogManager& fei::LogManager::getLogManager()
00026 {
00027   static fei::LogManager log_manager;
00028   return(log_manager);
00029 }
00030 
00031 fei::OutputLevel fei::LogManager::getOutputLevel()
00032 {
00033   return(output_level_);
00034 }
00035 
00036 void fei::LogManager::setOutputLevel(fei::OutputLevel olevel)
00037 {
00038   if (output_level_ == olevel) {
00039     return;
00040   }
00041 
00042   bool no_existing_output_stream = output_level_ < fei::BRIEF_LOGS;
00043 
00044   output_level_ = olevel;
00045 
00046   bool need_output_stream = output_level_ >= fei::BRIEF_LOGS;
00047 
00048   if (need_output_stream && no_existing_output_stream) {
00049     fei::LogFile::getLogFile().openOutputStream(output_path_.c_str(),
00050                                                   numProcs_, localProc_);
00051   }
00052 
00053 //  for(unsigned i=0; i<loggers_.size(); ++i) {
00054 //    loggers_[i]->setOutputLevel(output_level_);
00055 //  }
00056 }
00057 
00058 void fei::LogManager::setOutputLevel(const char* olevel)
00059 {
00060   setOutputLevel(fei::utils::string_to_output_level(olevel));
00061 }
00062 
00063 void fei::LogManager::setOutputPath(const std::string& opath)
00064 {
00065   output_path_ = opath;
00066 }
00067 
00068 const std::string& fei::LogManager::getOutputPath()
00069 {
00070   return(output_path_);
00071 }
00072 
00073 void fei::LogManager::setNumProcs(int nprocs, int localproc)
00074 {
00075   numProcs_ = nprocs;
00076   localProc_ = localproc;
00077 }
00078 
00079 void fei::LogManager::registerLogger(fei::Logger* logger)
00080 {
00081   loggers_.push_back(logger);
00082 }
00083 
00084 void fei::LogManager::removeLogger(fei::Logger* logger)
00085 {
00086    std::vector<fei::Logger*>::iterator
00087     l_iter = loggers_.begin(),
00088     l_end = loggers_.end();
00089 
00090   for(; l_iter != l_end; ++l_iter) {
00091     fei::Logger* l_ptr = *l_iter;
00092     if (l_ptr == logger) {
00093       loggers_.erase(l_iter);
00094       break;
00095     }
00096   }
00097 }
00098 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends