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