00001 #ifndef _RDA_LOGGER_H_
00002 #define _RDA_LOGGER_H_
00003
00004 #include <iostream>
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 class rdaLogger;
00016
00017 class LoggerBuffer;
00018
00095 class rdaLoggerFactory
00096 {
00097 public:
00098
00102 virtual rdaLogger* createLogger(const char* name) = 0;
00103
00107 virtual rdaLogger* createAuditLogger( const char* name )
00108 {
00109 return createLogger( name );
00110 }
00111
00115 virtual const char* getType() = 0;
00116
00121 virtual void destroy() {}
00122
00123 virtual ~rdaLoggerFactory() {}
00124
00125 protected:
00126
00127 rdaLoggerFactory() {}
00128
00129 private:
00130
00131
00132 rdaLoggerFactory(const rdaLoggerFactory&);
00133 void operator=(const rdaLoggerFactory&);
00134 };
00135
00136 class rdaSet;
00195 class rdaLogger
00196 {
00197
00198
00199
00200 friend class rdaLoggerControl;
00201
00202 public:
00203
00209 enum LogLevel
00210 {
00214 LOG_OFF = 0,
00218 LOG_ERROR = 10,
00222 LOG_WARNING = 20,
00226 LOG_INFO = 30,
00230 LOG_TRACE = 40,
00234 LOG_DEBUG = 90,
00238 LOG_ALL = 100
00239 };
00240
00258 static bool stringToLevel(LogLevel& level, const char* levelString);
00263 static const char* levelToString(LogLevel level);
00264
00269 static void printInfo();
00270
00281 static void init(rdaLoggerFactory& factory);
00290 static void init();
00294 static bool initialized();
00295
00302 static void destroy();
00303
00323 static rdaLogger* getLogger(const char* name);
00324
00336 static rdaLogger* getAuditLogger( const char* name );
00340 const char* getName()
00341 {
00342 return name_;
00343 }
00344
00348 void error(const char* message)
00349 {
00350 log(LOG_ERROR, message);
00351 }
00352 void verror(const char* fmt, ...);
00356 void warning(const char* message)
00357 {
00358 log(LOG_WARNING, message);
00359 }
00360 void vwarning(const char* fmt, ...);
00364 void info(const char* message)
00365 {
00366 log(LOG_INFO, message);
00367 }
00368 void vinfo(const char* fmt, ...);
00372 void trace(const char* message)
00373 {
00374 log(LOG_TRACE, message);
00375 }
00376 void vtrace(const char* fmt, ...);
00380 void debug(const char* message)
00381 {
00382 log(LOG_DEBUG, message);
00383 }
00384 void vdebug(const char* fmt, ...);
00388 LogLevel getLevel()
00389 {
00390 return level_;
00391 }
00395 void setLevel(LogLevel level)
00396 {
00397 level_ = level;
00398 }
00403 bool isLoggable(LogLevel level)
00404 {
00405 return level_ >= level;
00406 }
00411 static LogLevel getDefaultLevel()
00412 {
00413 return defaultLevel_;
00414 }
00418 std::ostream& getErrorStream()
00419 {
00420 return *errorStream;
00421 }
00425 std::ostream& getWarningStream()
00426 {
00427 return *warningStream;
00428 }
00432 std::ostream& getInfoStream()
00433 {
00434 return *infoStream;
00435 }
00439 std::ostream& getTraceStream()
00440 {
00441 return *traceStream;
00442 }
00446 std::ostream& getDebugStream()
00447 {
00448 return *debugStream;
00449 }
00450
00451
00456 static void setDefaultLevel(LogLevel level)
00457 {
00458 defaultLevel_ = level;
00459 }
00463 static void setLevels(LogLevel level);
00464
00465 virtual ~rdaLogger();
00466
00467 protected:
00468
00474 virtual void log(LogLevel level, const char* message) = 0;
00475
00476 rdaLogger(const char* name);
00477
00478 private:
00479
00480 char* name_;
00481 LogLevel level_;
00482 static LogLevel defaultLevel_;
00483 static rdaLoggerFactory* factory_;
00484 static rdaSet loggers_;
00485
00486 rdaLogger(const rdaLogger&);
00487 void operator=(const rdaLogger&);
00488 LoggerBuffer* errorBuffer, *warningBuffer, *infoBuffer, *traceBuffer, *debugBuffer;
00489 std::ostream* errorStream, *warningStream, *infoStream, *traceStream, *debugStream;
00490
00491 static rdaLogger* find(const char* name);
00492 };
00493
00494 #endif