Gaudi Framework, version v22r4

Home   Generated: Fri Sep 2 2011

MessageSvc.h

Go to the documentation of this file.
00001 #ifndef GAUDI_MESSAGESVC_H
00002 #define GAUDI_MESSAGESVC_H
00003 
00004 // Include files
00005 #include <string>
00006 #include <vector>
00007 #include <map>
00008 #include <set>
00009 #include <iosfwd>
00010 
00011 #include "GaudiKernel/StatusCode.h"
00012 #include "GaudiKernel/Service.h"
00013 #include "GaudiKernel/IMessageSvc.h"
00014 #include "GaudiKernel/Message.h"
00015 #include "GaudiKernel/Property.h"
00016 
00017 #include <boost/thread/recursive_mutex.hpp>
00018 #include <boost/array.hpp>
00019 
00020 // Forward declarations
00021 class ISvcLocator;
00022 
00023 //
00024 // ClassName:   MessageSvc
00025 //
00026 // Description: The MessageSvc service implements the IMessageSvc interface and provides the
00027 //              basic messaging needed by batch oriented applications.
00028 //
00029 // Author:      Iain Last
00030 //
00031 class MessageSvc : public extends2<Service, IMessageSvc, IInactiveMessageCounter> {
00032 public:
00033   typedef std::pair< std::string, std::ostream* > NamedStream;
00034   typedef std::multimap< int, NamedStream > StreamMap;
00035   typedef std::multimap< StatusCode, Message > MessageMap;
00036   typedef std::map< std::string, int > ThresholdMap;
00037 
00038   // Default constructor.
00039   MessageSvc( const std::string& name, ISvcLocator* svcloc );
00040   // Destructor.
00041   virtual ~MessageSvc();
00042 
00043   // Implementation of IService::reinitialize()
00044   virtual StatusCode reinitialize();
00045   // Implementation of IService::initialize()
00046   virtual StatusCode initialize();
00047   // Implementation of IService::finalize()
00048   virtual StatusCode finalize();
00049 
00050   // Implementation of IMessageSvc::reportMessage()
00051   virtual void reportMessage( const Message& message );
00052 
00053   // Implementation of IMessageSvc::reportMessage()
00054   virtual void reportMessage( const Message& msg, int outputLevel );
00055 
00056   // Implementation of IMessageSvc::reportMessage()
00057   virtual void reportMessage( const StatusCode& code, const std::string& source = "");
00058 
00059   // Implementation of IMessageSvc::reportMessage()
00060   virtual void reportMessage( const char* source, int type, const char* message);
00061 
00062   // Implementation of IMessageSvc::reportMessage()
00063   virtual void reportMessage( const std::string& source, int type, const std::string& message);
00064 
00065   // Implementation of IMessageSvc::insertMessage()
00066   virtual void insertMessage( const StatusCode& code, const Message& message );
00067 
00068   // Implementation of IMessageSvc::eraseMessage()
00069   virtual void eraseMessage();
00070 
00071   // Implementation of IMessageSvc::eraseMessage()
00072   virtual void eraseMessage( const StatusCode& code ) ;
00073 
00074   // Implementation of IMessageSvc::eraseMessage()
00075   virtual void eraseMessage( const StatusCode& code, const Message& message );
00076 
00077   // Implementation of IMessageSvc::insertStream()
00078   virtual void insertStream( int message_type, const std::string& name, std::ostream* stream );
00079 
00080   // Implementation of IMessageSvc::eraseStream()
00081   virtual void eraseStream();
00082 
00083   // Implementation of IMessageSvc::eraseStream()
00084   virtual void eraseStream( int message_type );
00085 
00086   // Implementation of IMessageSvc::eraseStream()
00087   virtual void eraseStream( int message_type, std::ostream* stream );
00088 
00089   // Implementation of IMessageSvc::eraseStream()
00090   virtual void eraseStream( std::ostream* stream );
00091 
00092   // Implementation of IMessageSvc::desaultStream()
00093   virtual std::ostream* defaultStream() const {
00094     return m_defaultStream;
00095   }
00096 
00097   // Implementation of IMessageSvc::setDefaultStream()
00098   virtual void setDefaultStream( std::ostream* stream ) {
00099     boost::recursive_mutex::scoped_lock lock(m_reportMutex);
00100     m_defaultStream = stream;
00101   }
00102 
00103   // Implementation of IMessageSvc::ouputLevel()
00104   virtual int outputLevel()   const;
00105 
00106   // Implementation of IMessageSvc::ouputLevel()
00107   virtual int outputLevel(const std::string& source)   const;
00108 
00109   // Implementation of IMessageSvc::setOuputLevel()
00110   virtual void setOutputLevel(int new_level);
00111 
00112   // Implementation of IMessageSvc::setOuputLevel()
00113   virtual void setOutputLevel(const std::string& source, int new_level);
00114 
00115   // Implementation of IMessageSvc::useColor()
00116   virtual bool useColor() const { return m_color; }
00117 
00118   // Implementation of IMessageSvc::getLogColor()
00119   virtual std::string getLogColor(int logLevel) const;
00120 
00121   // Implementation of IMessageSvc::messageCount()
00122   virtual int messageCount( MSG::Level logLevel ) const;
00123 
00124   // Implementation of IInactiveMessageCounter::incrInactiveCount()
00125   virtual void incrInactiveCount( MSG::Level level,
00126                                   const std::string& src );
00127 
00128 
00129 private:
00130   std::ostream* m_defaultStream;      
00131   Message m_defaultMessage;           
00132   StreamMap m_streamMap;              
00133   MessageMap m_messageMap;            
00134   ThresholdMap m_thresholdMap;        
00135   std::string m_defaultFormat;        
00136   std::string m_defaultTimeFormat;    
00137   StringArrayProperty m_thresholdProp[MSG::NUM_LEVELS]; 
00138   BooleanProperty m_color;
00139   BooleanProperty m_stats;
00140   UnsignedIntegerProperty m_statLevel;
00141   StringArrayProperty m_logColors[MSG::NUM_LEVELS];
00142   IntegerProperty m_msgLimit[MSG::NUM_LEVELS];
00143 
00144   std::string m_logColorCodes[MSG::NUM_LEVELS];
00145 
00147   struct MsgAry {
00149     typedef boost::array<int,MSG::NUM_LEVELS> ArrayType;
00151     ArrayType msg;
00153     MsgAry() {
00154       // This is a special hack to have a fast initialization of the array
00155       // because we cannot use initializer lists in the constructor (should be
00156       // possible in C++0X).
00157       static const ArrayType zero = {{0}};
00158       msg = zero;
00159     }
00160   };
00161 
00162   std::map<std::string,MsgAry> m_sourceMap, m_inactiveMap;
00163   BooleanProperty m_suppress, m_inactCount;
00164 
00165   std::string colTrans(std::string, int);
00166   typedef std::map<std::string, MSG::Color> ColorMap;
00167   ColorMap m_colMap;
00168 
00169   int m_msgCount[MSG::NUM_LEVELS];
00170 
00171   std::map<std::string, std::string> m_loggedStreamsName;
00172   typedef std::map<std::string, std::ostream*> LoggedStreamsMap_t;
00173   LoggedStreamsMap_t m_loggedStreams;
00174 
00175   void initColors(Property& prop);
00176   void setupColors(Property& prop);
00177   void setupLimits(Property& prop);
00178   void setupThreshold(Property& prop);
00179   void setupInactCount(Property& prop);
00180 
00181   void setupLogStreams();
00182 
00183   void tee( const std::string& sourceName, const std::string& logFileName,
00184             const std::set<std::string>& declaredOutFileNames );
00185 
00187   mutable boost::recursive_mutex m_reportMutex;
00188 
00190   mutable boost::recursive_mutex m_messageMapMutex;
00191 
00194   mutable boost::recursive_mutex m_thresholdMapMutex;
00195 };
00196 
00197 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Fri Sep 2 2011 16:24:59 for Gaudi Framework, version v22r4 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004