00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00050 #include "Logger.h"
00051 #include <stdio.h>
00052 #include <string>
00053 #ifdef Solaris
00054 #include <varargs.h>
00055 #endif
00056
00057 Logger Log;
00059
00060
00061
00062
00070 Logger::Logger( ostream& o, int iMin, int iMax )
00071 {
00072 strcpy( m_strHeader, "" );
00073 m_timing.restartTime();
00074 m_os = &o;
00075 }
00076
00084 bool Logger::log( int iLevel, string str)
00085 {
00086 if( isInLogLevel( iLevel ) )
00087 {
00088 *m_os << m_strHeader << str;
00089 return true;
00090 }
00091
00092 return false;
00093 }
00094
00105 bool Logger::log( int iLevel, char *str, ... )
00106 {
00107 if( isInLogLevel( iLevel ) )
00108 {
00109 va_list ap;
00110 #ifdef Solaris
00111 va_start( ap );
00112 #else
00113 va_start( ap, str );
00114 #endif
00115 vsprintf( m_buf, str, ap );
00116 va_end(ap);
00117
00118 *m_os << m_strHeader << m_buf << endl;
00119 return true;
00120 }
00121
00122 return false;
00123 }
00124
00136 bool Logger::logWithTime( int iLevel, char *str, ... )
00137 {
00138 if( isInLogLevel( iLevel ) )
00139 {
00140 va_list ap;
00141 #ifdef Solaris
00142 va_start( ap );
00143 #else
00144 va_start( ap, str );
00145 #endif
00146 vsprintf( m_buf, str, ap );
00147 va_end(ap);
00148
00149 string s = m_strHeader;
00150 s.append( m_buf );
00151 s.copy( m_buf, string::npos );
00152 m_buf[s.length()] = '\0';
00153 m_timing.printTimeDiffWithText( *m_os, m_buf );
00154 return true;
00155 }
00156
00157 return false;
00158 }
00159
00161 void Logger::restartTimer()
00162 {
00163 return m_timing.restartTime();
00164 }
00165
00168 Timing Logger::getTiming( )
00169 {
00170 return m_timing;
00171 }
00172
00173
00178 bool Logger::isInLogLevel( int iLevel )
00179 {
00180 return m_setLogLevels.find( iLevel ) != m_setLogLevels.end() ;
00181 }
00182
00187 bool Logger::addLogLevel( int iLevel )
00188 {
00189 m_setLogLevels.insert( iLevel );
00190 return true;
00191 }
00192
00198 bool Logger::addLogRange( int iMin, int iMax )
00199 {
00200 bool bReturn = true;
00201 for( int i = iMin ; i <= iMax; i++ )
00202 bReturn &= addLogLevel( i );
00203 return bReturn;
00204 }
00205
00209 char* Logger::getHeader( )
00210 {
00211 return m_strHeader;
00212 }
00213
00217 bool Logger::setHeader( char *str )
00218 {
00219 strcpy( m_strHeader, str );
00220 return true;
00221 }
00222
00229 bool Logger::setHeader( int i1, int i2 )
00230 {
00231 sprintf( m_strHeader, "(%d, %d) ", i1, i2 );
00232 return true;
00233 }
00234
00240 bool Logger::setOutputStream( ostream& o )
00241 {
00242 m_os = &o;
00243 return true;
00244 }
00245
00250 ostream& Logger::getOutputStream( )
00251 {
00252 return *m_os;
00253 }
00254
00258 void Logger::showLogLevels( ostream &os )
00259 {
00260 set<int>::iterator itr;
00261 for (itr = m_setLogLevels.begin() ; itr != m_setLogLevels.end() ; itr++)
00262 os << *itr << " " ;
00263 os << endl;
00264
00265 }
00266
00267
00268
00269
00274 double Timing::getTimeDifference( struct timeval tv1, struct timeval tv2 )
00275 {
00276
00277 return ((double)tv1.tv_sec + (double)tv1.tv_usec/1000000 ) -
00278 ((double)tv2.tv_sec + (double)tv2.tv_usec/1000000 ) ;
00279 }
00280
00289 void Timing::printTimeDiffWithText( ostream &os, char *str, int iFactor )
00290 {
00291
00292 os <<setw(6)<< setfill('0')<< getElapsedTime()*iFactor << ":" << str << endl;
00293 }
00294
00298 double Timing::getElapsedTime( )
00299 {
00300 struct timeval time2;
00301 gettimeofday( &time2, NULL );
00302 return getTimeDifference( time2, time1 );
00303 }
00304
00306 void Timing::restartTime( )
00307 {
00308 gettimeofday( &time1, NULL );
00309 }
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334