Gaudi Framework, version v20r4

Generated: 8 Jan 2009

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 
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

Generated at Thu Jan 8 17:44:23 2009 for Gaudi Framework, version v20r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004