Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

MessageSvc.h

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

Generated at Mon May 3 12:14:50 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004