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
00046 #include "Logger.h"
00047 #include <stdio.h>
00048 #include <string>
00049 #ifdef Solaris
00050 #include <varargs.h>
00051 #endif
00052
00053 Logger Log;
00055
00056
00057
00058
00066 Logger::Logger( ostream& o, int iMin, int iMax )
00067 {
00068 iMinLogLevel = iMin;
00069 iMaxLogLevel = iMax;
00070 strcpy( strHeader, "" );
00071 timing.restartTime();
00072 os = &o;
00073 }
00074
00082 bool Logger::log( int iLevel, string str)
00083 {
00084 if( isInLogLevel( iLevel ) )
00085 {
00086 *os << strHeader << str;
00087 return true;
00088 }
00089
00090 return false;
00091 }
00092
00103 bool Logger::log( int iLevel, char *str, ... )
00104 {
00105 if( isInLogLevel( iLevel ) )
00106 {
00107 va_list ap;
00108 #ifdef Solaris
00109 va_start( ap );
00110 #else
00111 va_start( ap, str );
00112 #endif
00113 vsprintf( buf, str, ap );
00114 va_end(ap);
00115
00116 *os << strHeader << buf << endl;
00117 return true;
00118 }
00119
00120 return false;
00121 }
00122
00134 bool Logger::logWithTime( int iLevel, char *str, ... )
00135 {
00136 if( isInLogLevel( iLevel ) )
00137 {
00138 va_list ap;
00139 #ifdef Solaris
00140 va_start( ap );
00141 #else
00142 va_start( ap, str );
00143 #endif
00144 vsprintf( buf, str, ap );
00145 va_end(ap);
00146
00147 string s = strHeader;
00148 s.append( buf );
00149 s.copy( buf, string::npos );
00150 buf[s.length()] = '\0';
00151 timing.printTimeDiffWithText( *os, buf );
00152 return true;
00153 }
00154
00155 return false;
00156 }
00157
00159 void Logger::restartTimer()
00160 {
00161 return timing.restartTime();
00162 }
00163
00169 bool Logger::isInLogLevel( int iLevel )
00170 {
00171 return ( iLevel >= getMinLogLevel() && iLevel <= getMaxLogLevel() ) ||
00172 iLevel == iExtraLogLevel; ;
00173 }
00174
00178 int Logger::getMinLogLevel( ) const
00179 {
00180 return iMinLogLevel;
00181 }
00182
00187 bool Logger::setMinLogLevel( int iLevel )
00188 {
00189 iMinLogLevel = ( iLevel > 0 ) ? iLevel : 0;
00190 return true;
00191 }
00192
00196 int Logger::getMaxLogLevel( ) const
00197 {
00198 return iMaxLogLevel;
00199 }
00200
00205 bool Logger::setMaxLogLevel( int iLevel )
00206 {
00207 iMaxLogLevel = ( iLevel > 0 ) ? iLevel : 0;
00208 return true;
00209 }
00210
00214 int Logger::getExtraLogLevel( ) const
00215 {
00216 return iExtraLogLevel;
00217 }
00218
00223 bool Logger::setExtraLogLevel( int iLevel )
00224 {
00225 iExtraLogLevel = iLevel;
00226 return true;
00227 }
00228
00229
00230
00234 char* Logger::getHeader( )
00235 {
00236 return strHeader;
00237 }
00238
00243 bool Logger::setHeader( char *str )
00244 {
00245 strcpy( strHeader, str );
00246 return true;
00247 }
00248
00255 bool Logger::setHeader( int i1, int i2 )
00256 {
00257 sprintf( strHeader, "(%d, %d) ", i1, i2 );
00258 return true;
00259 }
00260
00266 bool Logger::setOutputStream( ostream& o )
00267 {
00268 os = &o;
00269 return true;
00270 }
00271
00272
00273
00274
00275
00280 double Timing::getTimeDifference( struct timeval tv1, struct timeval tv2 )
00281 {
00282
00283 return ((double)tv1.tv_sec + (double)tv1.tv_usec/1000000 ) -
00284 ((double)tv2.tv_sec + (double)tv2.tv_usec/1000000 ) ;
00285 }
00286
00293 void Timing::printTimeDiffWithText( ostream &os, char *str, int iFactor )
00294 {
00295
00296 os <<setw(6)<< setfill('0')<< getElapsedTime()*iFactor << ":" << str << endl;
00297 }
00298
00302 double Timing::getElapsedTime( )
00303 {
00304 struct timeval time2;
00305 gettimeofday( &time2, NULL );
00306 return getTimeDifference( time2, time1 );
00307 }
00308
00310 void Timing::restartTime( )
00311 {
00312 gettimeofday( &time1, NULL );
00313 }
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338