MsgLogger/include/MsgLogLevel.h

Go to the documentation of this file.
00001 #ifndef MSGLOGLEVEL_HH
00002 #define MSGLOGLEVEL_HH
00003 
00004 //--------------------------------------------------------------------------
00005 // File and Version Information:
00006 //      $Id: MsgLogLevel.h 2700 2011-12-09 21:52:07Z salnikov@SLAC.STANFORD.EDU $
00007 //
00008 // Description:
00009 //      Class MsgLogLevel.
00010 //
00011 // Environment:
00012 //      This software was developed for the BaBar collaboration.  If you
00013 //      use all or part of it, please give an appropriate acknowledgement.
00014 //
00015 // Author List:
00016 //      Andy Salnikov
00017 //
00018 // Copyright Information:
00019 //      Copyright (C) 2005 SLAC
00020 //
00021 //------------------------------------------------------------------------
00022 
00023 //-------------
00024 // C Headers --
00025 //-------------
00026 extern "C" {
00027 }
00028 
00029 //---------------
00030 // C++ Headers --
00031 //---------------
00032 #include <iostream>
00033 
00034 //----------------------
00035 // Base Class Headers --
00036 //----------------------
00037 
00038 //-------------------------------
00039 // Collaborating Class Headers --
00040 //-------------------------------
00041 
00042 //------------------------------------
00043 // Collaborating Class Declarations --
00044 //------------------------------------
00045 
00046 //              ---------------------
00047 //              -- Class Interface --
00048 //              ---------------------
00049 
00050 namespace MsgLogger {
00051 
00052 /**
00053  *  @ingroup MsgLogger
00054  *
00055  *  This class defines message logging levels, their names and ordering.
00056  *
00057  *  This software was developed for the BaBar collaboration.  If you
00058  *  use all or part of it, please give an appropriate acknowledgement.
00059  *
00060  *  Copyright (C) 2005 SLAC
00061  *
00062  *  @see MsgLogLevelMsgLogLevel
00063  *
00064  *  @version $Id: MsgLogLevel.h 2700 2011-12-09 21:52:07Z salnikov@SLAC.STANFORD.EDU $
00065  *
00066  *  @author Andy Salnikov
00067  */
00068 
00069 class MsgLogLevel {
00070 
00071 public:
00072 
00073   /**
00074    *  Message Level levels. The code in the package depends on the range
00075    *  which should in [0...LAST_LEVEL]
00076    */
00077   enum Level { debug,
00078                trace,
00079                info,
00080                warning,
00081                error,
00082                fatal,
00083                nolog,      // There should be no messages with this level, it's only for loggers
00084                LAST_LEVEL = nolog
00085              };
00086 
00087   // Construct root logger
00088   MsgLogLevel( Level code ) : _level(code) {}
00089   explicit MsgLogLevel( int code ) ;
00090   explicit MsgLogLevel( const std::string& name ) ;
00091 
00092   // default copy ctor is OK
00093   //MsgLogLevel( const MsgLogLevel& );
00094 
00095   // Destructor
00096   ~MsgLogLevel() {}
00097 
00098   // default assignment is OK
00099   //MsgLogLevel& operator= ( const MsgLogLevel& );
00100   MsgLogLevel& operator= ( const Level code ) { _level = code ; return *this ;}
00101 
00102   // comparison operators
00103   bool operator == ( MsgLogLevel other ) const { return _level == other._level ; }
00104   bool operator != ( MsgLogLevel other ) const { return _level != other._level ; }
00105   bool operator < ( MsgLogLevel other ) const { return int(_level) < int(other._level) ; }
00106   bool operator <= ( MsgLogLevel other ) const { return int(_level) <= int(other._level) ; }
00107   bool operator > ( MsgLogLevel other ) const { return int(_level) > int(other._level) ; }
00108   bool operator >= ( MsgLogLevel other ) const { return int(_level) >= int(other._level) ; }
00109 
00110   // get full printable name of Level level
00111   const char* levelName () const ;
00112 
00113   // get 3-letter printable name of Level code
00114   const char* level3 () const ;
00115 
00116   // get one-char Level code
00117   char levelLetter () const ;
00118 
00119   // return level code, guaranteed between 0 and LAST_LEVEL
00120   int code() const { return int(_level) ; }
00121 
00122 protected:
00123 
00124   // Helper functions
00125 
00126 private:
00127 
00128   // Data
00129   Level _level ;
00130 
00131 //------------------
00132 // Static Members --
00133 //------------------
00134 
00135 public:
00136 
00137   // default level for loggers
00138   static MsgLogLevel defaultLevel () { return MsgLogLevel(info) ; }
00139 
00140 };
00141 
00142 inline std::ostream&
00143 operator<< ( std::ostream& o, MsgLogLevel sev ) {
00144   return o << sev.levelName() ;
00145 }
00146 
00147 } // namespace MsgLogger
00148 
00149 #endif // MSGLOGLEVEL_HH

Generated on 19 Dec 2016 for PSANAclasses by  doxygen 1.4.7