/home/fwph/code/wurde/rde/core/Logger.cpp

Go to the documentation of this file.
00001 
00026 #include <Logger.H>
00027 #include <WURDEConfiguration.H>
00028 
00029 //$Id: Logger.cpp 68 2007-02-01 17:56:57Z fwph $
00030 using namespace WURDE;
00031 using namespace std;
00032 
00033 namespace WURDE{
00034        
00035        Logger *g_robotLoggerPtr;
00036 
00037        LoggerStream g_logdebug(LOG_DEBUG);
00038        LoggerStream g_loginfo(LOG_INFO);
00039        LoggerStream g_lognotice(LOG_NOTICE);
00040        LoggerStream g_logwarn(LOG_WARNING);
00041        LoggerStream g_logerror(LOG_ERR);
00042        LoggerStream g_logfatal(LOG_CRIT);
00043 
00044 
00045        Logger::Logger(std::string somename)
00046               :LoggerTransport("Any"){
00047               m_logName=somename;
00048               setGlobalName(somename);
00049               if(!g_robotLoggerPtr){
00050                      g_robotLoggerPtr=this;
00051                      //              m_stream.register_callback(&RobotObjects::theCallback,0);
00052               }
00053 
00054               //these are just temporary
00055               m_toFile=false;
00056               m_toNetwork=false;
00057               m_toSyslog=false;
00058               m_toStderr=false;
00059 
00060               m_logLevel=LOG_DEBUG;
00061 
00062               setNetworkLogging(true);
00063               setStderr(true);
00064               setSysLogging(true);
00065               m_init=false;
00066        };
00067 
00068        Logger::Logger(std::string somename, std::string filename)
00069               :LoggerTransport("Any"){
00070               m_logName=somename;
00071               setGlobalName(somename);
00072               if(!g_robotLoggerPtr){
00073                      g_robotLoggerPtr=this;
00074                      //              m_stream.register_callback(&RobotObjects::theCallback,0);
00075               }
00076 
00077               //these are just temporary
00078               m_toFile=false;
00079               m_toNetwork=false;
00080               m_toSyslog=false;
00081               m_toStderr=false;
00082 
00083               // still need to figure out what we're doing here.
00084               m_outFilename=filename;
00085               m_init=false;
00086               setNetworkLogging(true);
00087               setStderr(true);
00088               setSysLogging(true);
00089        }
00090 
00091        void Logger::initLogger(){
00092               mutex= (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
00093               m_init=true;
00094               m_logLevel=g_globalConfiguration.getLogLevel();
00095        }
00096 
00100        /*
00101        std::ostream &Logger::flush(){
00102               cout << " IN flush. " << endl;
00103               std::ostream & retval=((ostream *)this)->ostream::flush();
00104               info(this->str());
00105               ((stringstream *)this)->str(std::string());
00106               return retval;
00107        }
00108        */
00109        void Logger::log(std::string somestring, int priority){
00110               if(!m_init){
00111                      initLogger();
00112               }
00113 
00114               std::string logstring;
00115               logstring  =  m_logName + " " + priorityToString(priority) +" " + somestring;           
00116 
00117               if(priority <= m_logLevel){
00118                      if(m_toSyslog){
00119                             syslog(priority|LOG_LOCAL0,logstring.c_str());
00120                      }
00121                      
00122                      if(m_toFile){
00123                             /* endl forces file synchronization */
00124                             // m_outputFile << ctime(NULL) << " : " << priorityToString(priority) << logstring << endl;
00125                      }
00126                      
00127                      if(m_toNetwork){
00128                              pthread_mutex_lock(&mutex);
00129                              data.logFormat="";
00130                              data.logData.push_back(0);
00131                              data.logString=somestring.c_str();
00132                              data.priority=priority;
00133                              
00134                              publishData();
00135                              runUpdate();
00136                              pthread_mutex_unlock(&mutex);
00137                      }
00138               }
00139        }
00140        
00141        
00142        void Logger::setNetworkLogging(bool value){
00143               if(value&&!m_toNetwork){
00144                      data.timestamp.now();
00145                      data.source=m_globalname;
00146                      data.logData.push_back(0);
00147                
00148                      data.logFormat= " ";
00149                      data.logString= " ";
00150               }
00151               m_toNetwork=false;
00152               
00153        }
00154        
00155        void Logger::setSysLogging(bool value){
00156               if(value&&!m_toSyslog){
00157                      if(m_toStderr){
00158                             openlog("Robot",LOG_PERROR|LOG_PID,LOG_LOCAL0);
00159                }else{
00160                       openlog("Robot",LOG_PID,LOG_LOCAL0);
00161                }
00162               }else if(!value&&m_toSyslog){
00163                      closelog();
00164               }
00165               
00166               m_toSyslog=value;
00167               
00168        }
00169        
00170        void Logger::setStderr(bool value){
00171               if(value){
00172                      if(m_toSyslog&&!m_toStderr){
00173                             closelog();
00174                             openlog("Robot",LOG_PERROR|LOG_PID,LOG_LOCAL0);
00175                      }
00176               }else{
00177                      if(m_toSyslog&&m_toStderr){
00178                             closelog();
00179                             openlog("Robot",LOG_PID,LOG_LOCAL0);
00180                      }
00181               }
00182               
00183               m_toStderr=value;
00184        }
00185      
00186        const char * priorityToString( int priority ){
00187               
00188               switch(priority){
00189               case LOG_EMERG:
00190                      return "[Emergency]";
00191               case LOG_ALERT:
00192                      return "[Alert]";
00193               case LOG_CRIT:
00194                      return "[Fatal]";
00195               case LOG_ERR:
00196                      return "[Error]";
00197               case LOG_WARNING:
00198                      return "[Warn]";
00199               case LOG_NOTICE:
00200                      return "[Notice]";
00201               case LOG_INFO:
00202                      return "[Info]";
00203               case LOG_DEBUG:
00204                      return "[Debug]";
00205               default:
00206                      break;
00207               }
00208               
00209               return "[Unknown]";
00210               
00211        }
00212 
00213        // stream stuff
00214        
00215 }

Generated on Thu Feb 1 15:31:54 2007 for WURDE by  doxygen 1.5.1