Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages | Examples

Logger.h

00001 #ifndef _RDA_LOGGER_H_
00002 #define _RDA_LOGGER_H_
00003 
00004 #include <iostream>
00005 //
00006 // 12 Sep 2002, N.Trofimov
00007 // 29 Nov 2002 NNT
00008 //    - added logger destroy()
00009 //    - doc comments
00010 //    - added undocumented vararg calls
00011 //  1 Apr 2004 NNT
00012 //    - added factory destroy()
00013 //  3 Apr 2007 WPG
00014 //    - added << operator
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       // hide
00132       rdaLoggerFactory(const rdaLoggerFactory&);
00133       void operator=(const rdaLoggerFactory&);
00134 };
00135 
00136 class rdaSet;
00195 class rdaLogger
00196 {
00197    //
00198    // Remote control of the logger
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       // hide
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

RDA-2.3 documentation - 27 Jun 2007 - N.Trofimov