![]() |
|
|
Generated: 8 Jan 2009 |
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