| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# MessageSvc.h

Go to the documentation of this file.

    00001 // $Header: /local/reps/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
    00020 // Forward declarations
    00021 class ISvcLocator;
    00022
    00023 //
    00024 // ClassName:   MessageSvc
    00025 //
    00026 // Description: The MessageSvc service implements the IMessageSvc interface anbd provides the
    00027 //              basic messaging needed by batch oriented applications.
    00028 //
    00029 // Author:      Iain Last
    00030 //
    00031 class MessageSvc : public Service,
    00032                    virtual public 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 IInterface::queryInterface()
    00117   virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvUnknown);
    00118
    00119   // Implementation of IMessageSvc::useColor()
    00120   virtual bool useColor() const { return m_color; }
    00121
    00122   // Implementation of IMessageSvc::getLogColor()
    00123   virtual std::string getLogColor(int logLevel) const;
    00124
    00125   // Implementation of IMessageSvc::messageCount()
    00126   virtual int messageCount( MSG::Level logLevel ) const;
    00127
    00128 private:
    00129   std::ostream* m_defaultStream;
    00130   Message m_defaultMessage;
    00131   StreamMap m_streamMap;
    00132   MessageMap m_messageMap;
    00133   ThresholdMap m_thresholdMap;
    00134   std::string m_defaultFormat;
    00135   std::string m_defaultTimeFormat;
    00136   StringArrayProperty m_thresholdProp[MSG::NUM_LEVELS];
    00137   BooleanProperty m_color;
    00138   BooleanProperty m_stats;
    00139   UnsignedIntegerProperty m_statLevel;
    00140   StringArrayProperty m_logColors[MSG::NUM_LEVELS];
    00141   IntegerProperty m_msgLimit[MSG::NUM_LEVELS];
    00142
    00143   std::string m_logColorCodes[MSG::NUM_LEVELS];
    00144
    00145   struct msgAry {
    00146     int msg[MSG::NUM_LEVELS];
    00147   };
    00148   std::map<std::string,msgAry> m_sourceMap;
    00149   BooleanProperty m_suppress;
    00150
    00151   std::string colTrans(std::string, int);
    00152   typedef std::map<std::string, MSG::Color> ColorMap;
    00153   ColorMap m_colMap;
    00154
    00155   int m_msgCount[MSG::NUM_LEVELS];
    00156
    00157   std::map<std::string, std::string> m_loggedStreamsName;
    00158   typedef std::map<std::string, std::ostream*> LoggedStreamsMap_t;
    00159   LoggedStreamsMap_t m_loggedStreams;
    00160
    00161   void initColors(Property& prop);
    00162   void setupColors(Property& prop);
    00163   void setupLimits(Property& prop);
    00164   void setupThreshold(Property& prop);
    00165
    00166   void setupLogStreams();
    00167
    00168   void tee( const std::string& sourceName, const std::string& logFileName,
    00169             const std::set<std::string>& declaredOutFileNames );
    00170
    00172   mutable boost::recursive_mutex m_reportMutex;
    00173
    00175   mutable boost::recursive_mutex m_messageMapMutex;
    00176
    00179   mutable boost::recursive_mutex m_thresholdMapMutex;
    00180 };
    00181
    00182 #endif