The Gaudi Framework  master (37c0b60a)
MessageSvc Class Reference

#include </builds/gaudi/Gaudi/GaudiCoreSvc/src/MessageSvc/MessageSvc.h>

Inheritance diagram for MessageSvc:
Collaboration diagram for MessageSvc:

Classes

struct  MsgAry
 Private helper class to keep the count of messages of a type (MSG::LEVEL). More...
 

Public Types

typedef std::pair< std::string, std::ostream * > NamedStream
 
typedef std::multimap< int, NamedStreamStreamMap
 
typedef std::multimap< StatusCode, MessageMessageMap
 
typedef std::map< std::string, int, std::less<> > ThresholdMap
 
- Public Types inherited from extends< Service, IMessageSvc, IInactiveMessageCounter >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
using Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

 MessageSvc (const std::string &name, ISvcLocator *svcloc)
 
StatusCode reinitialize () override
 Reinitialize Service. More...
 
StatusCode initialize () override
 Initialize Service. More...
 
StatusCode finalize () override
 Finalize Service. More...
 
void reportMessage (const Message &message) override
 
void reportMessage (const Message &msg, int outputLevel) override
 
void reportMessage (const StatusCode &code, std::string_view source="") override
 
void reportMessage (std::string source, int type, std::string message) override
 
void insertMessage (const StatusCode &code, Message message) override
 
void eraseMessage () override
 
void eraseMessage (const StatusCode &code) override
 
void eraseMessage (const StatusCode &code, const Message &message) override
 
void insertStream (int message_type, std::string name, std::ostream *stream) override
 
void eraseStream () override
 
void eraseStream (int message_type) override
 
void eraseStream (int message_type, std::ostream *stream) override
 
void eraseStream (std::ostream *stream) override
 
std::ostreamdefaultStream () const override
 
void setDefaultStream (std::ostream *stream) override
 
int outputLevel () const override
 
int outputLevel (std::string_view source) const override
 
void setOutputLevel (int new_level) override
 
void setOutputLevel (std::string_view source, int new_level) override
 
bool useColor () const override
 
std::string getLogColor (int logLevel) const override
 
int messageCount (MSG::Level logLevel) const override
 
void incrInactiveCount (MSG::Level level, std::string_view src) override
 
- Public Member Functions inherited from extends< Service, IMessageSvc, IInactiveMessageCounter >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service
More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service
More...
 
StatusCode sysStart () override
 Initialize Service
More...
 
StatusCode sysStop () override
 Initialize Service
More...
 
StatusCode sysFinalize () override
 Finalize Service
More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor
More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator
More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T >
StatusCode declareTool (ToolHandle< T > &handle, const std::string &toolTypeAndName, bool createIf=true)
 Declare used tool. More...
 
template<class T >
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
template<class T >
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property. More...
 
virtual StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p)=0
 Set the property from a property with a different name. More...
 
virtual StatusCode setProperty (const std::string &s)=0
 Set the property by string. More...
 
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals. More...
 
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string. More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name More...
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name. More...
 
Gaudi::Details::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected More...
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 

Protected Member Functions

virtual void i_reportMessage (const Message &msg, int outputLevel)
 Internal implementation of reportMessage(const Message&,int) without lock. More...
 
virtual void i_reportMessage (const StatusCode &code, std::string_view source)
 Internal implementation of reportMessage(const StatusCode&,const std::string&) without lock. More...
 
- Protected Member Functions inherited from Service
std::vector< IAlgTool * > & tools ()
 
 ~Service () override
 Standard Destructor
More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Private Member Functions

void setupColors (Gaudi::Details::PropertyBase &prop)
 
void setupLimits (Gaudi::Details::PropertyBase &prop)
 
void setupThreshold (Gaudi::Details::PropertyBase &prop)
 
void setupInactCount (Gaudi::Details::PropertyBase &prop)
 
void setupLogStreams ()
 

Private Attributes

Gaudi::Property< std::stringm_defaultFormat { this, "Format", Message::getDefaultFormat(), "" }
 
Gaudi::Property< std::stringm_defaultTimeFormat { this, "timeFormat", Message::getDefaultTimeFormat(), "" }
 
Gaudi::Property< bool > m_stats { this, "showStats", false, "" }
 
Gaudi::Property< unsigned int > m_statLevel { this, "statLevel", 0, "" }
 
std::array< Gaudi::Property< std::vector< std::string > >, MSG::NUM_LEVELSm_thresholdProp
 
Gaudi::Property< bool > m_color { this, "useColors", false, "" }
 
std::array< Gaudi::Property< std::vector< std::string > >, MSG::NUM_LEVELSm_logColors
 
std::array< Gaudi::Property< int >, MSG::NUM_LEVELSm_msgLimit
 
Gaudi::Property< bool > m_suppress { this, "enableSuppression", false, "" }
 
Gaudi::Property< bool > m_inactCount { this, "countInactive", false, &MessageSvc::setupInactCount, "" }
 
Gaudi::Property< std::vector< std::string > > m_tracedInactiveSources
 
Gaudi::Property< std::map< std::string, std::string, std::less<> > > m_loggedStreamsName
 
std::ostreamm_defaultStream = &std::cout
 Pointer to the output stream. More...
 
Message m_defaultMessage
 Default Message. More...
 
StreamMap m_streamMap
 Stream map. More...
 
MessageMap m_messageMap
 Message map. More...
 
ThresholdMap m_thresholdMap
 Output level threshold map. More...
 
std::string m_logColorCodes [MSG::NUM_LEVELS]
 
std::map< std::string, MsgAry, std::less<> > m_sourceMap
 
std::map< std::string, MsgAry, std::less<> > m_inactiveMap
 
std::array< int, MSG::NUM_LEVELSm_msgCount
 
std::map< std::string, std::shared_ptr< std::ostream >, std::less<> > m_loggedStreams
 
std::recursive_mutex m_reportMutex
 Mutex to synchronize multiple threads printing. More...
 
std::recursive_mutex m_messageMapMutex
 Mutex to synchronize multiple access to m_messageMap. More...
 
std::recursive_mutex m_thresholdMapMutex
 Mutex to synchronize multiple access to m_thresholdMap (. More...
 

Additional Inherited Members

- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state
More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state
More...
 
Gaudi::Property< int > m_outputLevel { this, "OutputLevel", MSG::NIL, "output level" }
 flag indicating whether ToolHandle tools have been added to m_tools More...
 
Gaudi::Property< bool > m_auditInit { this, "AuditServices", false, "[[deprecated]] unused" }
 
Gaudi::Property< bool > m_auditorInitialize { this, "AuditInitialize", false, "trigger auditor on initialize()" }
 
Gaudi::Property< bool > m_auditorStart { this, "AuditStart", false, "trigger auditor on start()" }
 
Gaudi::Property< bool > m_auditorStop { this, "AuditStop", false, "trigger auditor on stop()" }
 
Gaudi::Property< bool > m_auditorFinalize { this, "AuditFinalize", false, "trigger auditor on finalize()" }
 
Gaudi::Property< bool > m_auditorReinitialize { this, "AuditReinitialize", false, "trigger auditor on reinitialize()" }
 
Gaudi::Property< bool > m_auditorRestart { this, "AuditRestart", false, "trigger auditor on restart()" }
 
Gaudi::Property< bool > m_autoRetrieveTools
 
Gaudi::Property< bool > m_checkToolDeps
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service
More...
 

Detailed Description

Definition at line 40 of file MessageSvc.h.

Member Typedef Documentation

◆ MessageMap

Definition at line 44 of file MessageSvc.h.

◆ NamedStream

Definition at line 42 of file MessageSvc.h.

◆ StreamMap

Definition at line 43 of file MessageSvc.h.

◆ ThresholdMap

Definition at line 45 of file MessageSvc.h.

Constructor & Destructor Documentation

◆ MessageSvc()

MessageSvc::MessageSvc ( const std::string name,
ISvcLocator svcloc 
)

Definition at line 73 of file MessageSvc.cpp.

73  : base_class( name, svcloc ) {
74 
76  SmartIF<IAppMgrUI> app = svcloc;
77  if ( app ) app->outputLevelUpdate();
78  } );
79 
80 #ifndef NDEBUG
81  // initialize the MsgStream static flag.
83 #endif
84 
85  for ( int ic = 0; ic < MSG::NUM_LEVELS; ++ic ) {
86  m_logColors[ic].declareUpdateHandler( &MessageSvc::setupColors, this );
87  m_msgLimit[ic].declareUpdateHandler( &MessageSvc::setupLimits, this );
88  m_thresholdProp[ic].declareUpdateHandler( &MessageSvc::setupThreshold, this );
89  }
90 
91  m_logColors[MSG::FATAL].set( { "blue", "red" } );
92  m_logColors[MSG::ERROR].set( { "white", "red" } );
93  m_logColors[MSG::WARNING].set( { "yellow" } );
94 
96 }

Member Function Documentation

◆ defaultStream()

std::ostream* MessageSvc::defaultStream ( ) const
inlineoverride

Definition at line 97 of file MessageSvc.h.

97 { return m_defaultStream; }

◆ eraseMessage() [1/3]

void MessageSvc::eraseMessage ( )
override

Definition at line 512 of file MessageSvc.cpp.

512  {
513  auto lock = std::scoped_lock{ m_messageMapMutex };
515 }

◆ eraseMessage() [2/3]

void MessageSvc::eraseMessage ( const StatusCode code)
override

Definition at line 524 of file MessageSvc.cpp.

524  {
525  auto lock = std::scoped_lock{ m_messageMapMutex };
527 }

◆ eraseMessage() [3/3]

void MessageSvc::eraseMessage ( const StatusCode code,
const Message message 
)
override

Definition at line 536 of file MessageSvc.cpp.

536  {
537  auto lock = std::scoped_lock{ m_messageMapMutex };
538 
540  [&]( MessageMap::const_reference j ) { return j.second == msg; } );
541 }

◆ eraseStream() [1/4]

void MessageSvc::eraseStream ( )
override

Definition at line 455 of file MessageSvc.cpp.

455 { m_streamMap.clear(); }

◆ eraseStream() [2/4]

void MessageSvc::eraseStream ( int  message_type)
override

Definition at line 464 of file MessageSvc.cpp.

464 { m_streamMap.erase( message_type ); }

◆ eraseStream() [3/4]

void MessageSvc::eraseStream ( int  message_type,
std::ostream stream 
)
override

Definition at line 473 of file MessageSvc.cpp.

473  {
474  if ( stream ) {
475  erase_if( m_streamMap, m_streamMap.equal_range( key ),
476  [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
477  }
478 }

◆ eraseStream() [4/4]

void MessageSvc::eraseStream ( std::ostream stream)
override

Definition at line 487 of file MessageSvc.cpp.

487  {
488  if ( stream ) {
489  erase_if( m_streamMap, [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
490  }
491 }

◆ finalize()

StatusCode MessageSvc::finalize ( )
override

Finalize Service.

Definition at line 225 of file MessageSvc.cpp.

225  {
226 
227  m_suppress = false;
228 
229  {
231 
232  if ( m_stats ) {
233  os << "Summarizing all message counts" << std::endl;
234  } else {
235  os << "Listing sources of suppressed message: " << std::endl;
236  }
237 
238  os << "=====================================================" << std::endl;
239  os << " Message Source | Level | Count" << std::endl;
240  os << "-----------------------------+---------+-------------" << std::endl;
241 
242  bool found( false );
243 
244  for ( auto itr = m_sourceMap.begin(); itr != m_sourceMap.end(); ++itr ) {
245  for ( unsigned int ic = 0; ic < MSG::NUM_LEVELS; ++ic ) {
246  if ( ( itr->second.msg[ic] >= m_msgLimit[ic] && m_msgLimit[ic] != 0 ) ||
247  ( m_stats && itr->second.msg[ic] > 0 && ic >= m_statLevel.value() ) ) {
248  os << " ";
249  os.width( 28 );
250  os.setf( std::ios_base::left, std::ios_base::adjustfield );
251  os << itr->first;
252  os << "|";
253 
254  os.width( 8 );
255  os.setf( std::ios_base::right, std::ios_base::adjustfield );
256  os << levelNames[ic];
257  os << " |";
258 
259  os.width( 9 );
260  os << itr->second.msg[ic];
261  os << std::endl;
262 
263  found = true;
264  }
265  }
266  }
267  os << "=====================================================" << std::endl;
268  if ( found || m_stats ) std::cout << os.str() << std::flush;
269  }
270 
271 #ifndef NDEBUG
272  if ( m_inactCount.value() ) {
273 
275  os << "Listing sources of Unprotected and Unseen messages\n";
276 
277  bool found( false );
278 
279  unsigned int ml( 0 );
280  for ( const auto& itr : m_inactiveMap ) {
281  for ( unsigned int ic = 0; ic < MSG::NUM_LEVELS; ++ic ) {
282  if ( itr.second.msg[ic] != 0 && itr.first.length() > ml ) { ml = itr.first.length(); }
283  }
284  }
285 
286  for ( unsigned int i = 0; i < ml + 25; ++i ) os << "=";
287 
288  os << std::endl << " ";
289  os.width( ml + 2 );
290  os.setf( std::ios_base::left, std::ios_base::adjustfield );
291  os << "Message Source";
292  os.width( 1 );
293  os << "| Level | Count" << std::endl;
294 
295  for ( unsigned int i = 0; i < ml + 3; ++i ) os << "-";
296  os << "+---------+-----------" << std::endl;
297 
298  for ( auto itr = m_inactiveMap.begin(); itr != m_inactiveMap.end(); ++itr ) {
299  for ( unsigned int ic = 0; ic < MSG::NUM_LEVELS; ++ic ) {
300  if ( itr->second.msg[ic] != 0 ) {
301  os << " ";
302  os.width( ml + 2 );
303  os.setf( std::ios_base::left, std::ios_base::adjustfield );
304  os << itr->first;
305 
306  os << "|";
307 
308  os.width( 8 );
309  os.setf( std::ios_base::right, std::ios_base::adjustfield );
310  os << levelNames[ic];
311 
312  os << " |";
313 
314  os.width( 9 );
315  os << itr->second.msg[ic];
316 
317  os << std::endl;
318 
319  found = true;
320  }
321  }
322  }
323  for ( unsigned int i = 0; i < ml + 25; ++i ) os << "=";
324  os << std::endl;
325 
326  if ( found ) std::cout << os.str() << std::flush;
327  }
328 #endif
329 
330  return StatusCode::SUCCESS;
331 }

◆ getLogColor()

std::string MessageSvc::getLogColor ( int  logLevel) const
override

Definition at line 578 of file MessageSvc.cpp.

578  {
579  // ---------------------------------------------------------------------------
580  return ( logLevel < MSG::NUM_LEVELS ) ? m_logColorCodes[logLevel] : "";
581 }

◆ i_reportMessage() [1/2]

void MessageSvc::i_reportMessage ( const Message msg,
int  outputLevel 
)
protectedvirtual

Internal implementation of reportMessage(const Message&,int) without lock.

Definition at line 344 of file MessageSvc.cpp.

344  {
345  int key = msg.getType();
346 
347  ++m_msgCount[key];
348 
349  const Message* cmsg = &msg;
350 
351  // processing logged streams
352  if ( !m_loggedStreams.empty() ) {
353  auto iLog = m_loggedStreams.find( msg.getSource() );
354  if ( m_loggedStreams.end() != iLog ) { ( *iLog->second ) << *cmsg << std::endl; }
355  }
356 
357  if ( m_suppress.value() || m_stats.value() ) {
358 
359  // Increase the counter of 'key' type of messages for the source and
360  // get the new value.
361  const int nmsg = ++( m_sourceMap[msg.getSource()].msg[key] );
362 
363  if ( m_suppress.value() && m_msgLimit[key] != 0 ) {
364  if ( nmsg > m_msgLimit[key] ) return;
365  if ( nmsg == m_msgLimit[key] ) {
366  std::string txt = levelNames[key] + " message limit (" + std::to_string( m_msgLimit[key].value() ) +
367  ") reached for " + msg.getSource() + ". Suppressing further output.";
368  cmsg = new Message( msg.getSource(), MSG::WARNING, std::move( txt ) );
369  cmsg->setFormat( msg.getFormat() );
370  }
371  }
372  }
373 
374  auto range = m_streamMap.equal_range( key );
375  if ( range.first != m_streamMap.end() ) {
376  std::for_each( range.first, range.second,
377  [&]( StreamMap::const_reference sm ) { *sm.second.second << *cmsg << std::endl; } );
378  } else if ( key >= outputLevel ) {
379  msg.setFormat( m_defaultFormat );
380  msg.setTimeFormat( m_defaultTimeFormat );
381  if ( !m_color ) {
382  ( *m_defaultStream ) << *cmsg << std::endl << std::flush;
383  } else {
384  ( *m_defaultStream ) << m_logColorCodes[key] << *cmsg << "\033[m" << std::endl << std::flush;
385  }
386  }
387 
388  if ( cmsg != &msg ) { delete cmsg; } // cppcheck-suppress autovarInvalidDeallocation; false positive
389 }

◆ i_reportMessage() [2/2]

void MessageSvc::i_reportMessage ( const StatusCode code,
std::string_view  source 
)
protectedvirtual

Internal implementation of reportMessage(const StatusCode&,const std::string&) without lock.

Definition at line 420 of file MessageSvc.cpp.

420  {
421  int level = outputLevel( source );
422  auto report = [&]( Message mesg ) {
423  mesg.setSource( source );
424  Message stat_code( std::string{ source }, mesg.getType(), "Status Code " + std::to_string( code.getCode() ) );
425  i_reportMessage( std::move( stat_code ), level );
426  i_reportMessage( std::move( mesg ), level );
427  };
428 
429  auto range = m_messageMap.equal_range( code );
430  if ( range.first != m_messageMap.end() ) {
431  std::for_each( range.first, range.second, [&]( MessageMap::const_reference sm ) { report( sm.second ); } );
432  } else {
433  report( m_defaultMessage );
434  }
435 }

◆ incrInactiveCount()

void MessageSvc::incrInactiveCount ( MSG::Level  level,
std::string_view  src 
)
override

Definition at line 587 of file MessageSvc.cpp.

587  {
588  auto entry = m_inactiveMap.find( source );
589  if ( entry == m_inactiveMap.end() ) { entry = m_inactiveMap.emplace( source, MsgAry{} ).first; }
590  ++entry->second.msg[level];
591 
594  std::cout << "== inactive message detected from " << source << " ==\n";
595  std::string t;
596  System::backTrace( t, 25, 0 );
597  std::cout << t << std::endl;
598  }
599 }

◆ initialize()

StatusCode MessageSvc::initialize ( )
override

Initialize Service.

Definition at line 101 of file MessageSvc.cpp.

101  {
103  if ( sc.isFailure() ) return sc;
104 
105 #ifdef _WIN32
106  m_color = false;
107 #endif
108 
109  // make sure the map of logged stream names is initialized
110  setupLogStreams();
111 
112  return StatusCode::SUCCESS;
113 }

◆ insertMessage()

void MessageSvc::insertMessage ( const StatusCode code,
Message  message 
)
override

Definition at line 500 of file MessageSvc.cpp.

500  {
501  auto lock = std::scoped_lock{ m_messageMapMutex };
503 }

◆ insertStream()

void MessageSvc::insertStream ( int  message_type,
std::string  name,
std::ostream stream 
)
override

Definition at line 444 of file MessageSvc.cpp.

444  {
446 }

◆ messageCount()

int MessageSvc::messageCount ( MSG::Level  logLevel) const
override

Definition at line 584 of file MessageSvc.cpp.

584 { return m_msgCount[level]; }

◆ outputLevel() [1/2]

int MessageSvc::outputLevel ( ) const
override

Definition at line 544 of file MessageSvc.cpp.

544  {
545  // ---------------------------------------------------------------------------
546  return m_outputLevel;
547 }

◆ outputLevel() [2/2]

int MessageSvc::outputLevel ( std::string_view  source) const
override

Definition at line 550 of file MessageSvc.cpp.

550  {
551  // ---------------------------------------------------------------------------
552  auto lock = std::scoped_lock{ m_thresholdMapMutex };
553  auto it = m_thresholdMap.find( source );
554  return it != m_thresholdMap.end() ? it->second : m_outputLevel.value();
555 }

◆ reinitialize()

StatusCode MessageSvc::reinitialize ( )
override

Reinitialize Service.

Definition at line 118 of file MessageSvc.cpp.

118  {
120  StatusCode sc = initialize();
122 
123  return sc;
124 }

◆ reportMessage() [1/4]

void MessageSvc::reportMessage ( const Message message)
override

Definition at line 397 of file MessageSvc.cpp.

397 { reportMessage( msg, outputLevel( msg.getSource() ) ); }

◆ reportMessage() [2/4]

void MessageSvc::reportMessage ( const Message msg,
int  outputLevel 
)
override

Definition at line 339 of file MessageSvc.cpp.

339  {
340  auto lock = std::scoped_lock{ m_reportMutex };
342 }

◆ reportMessage() [3/4]

void MessageSvc::reportMessage ( const StatusCode code,
std::string_view  source = "" 
)
override

Definition at line 415 of file MessageSvc.cpp.

415  {
416  auto lock = std::scoped_lock{ m_messageMapMutex };
417  i_reportMessage( code, source );
418 }

◆ reportMessage() [4/4]

void MessageSvc::reportMessage ( std::string  source,
int  type,
std::string  message 
)
override

Definition at line 405 of file MessageSvc.cpp.

405  {
406  reportMessage( Message{ std::move( source ), type, std::move( message ) } );
407 }

◆ setDefaultStream()

void MessageSvc::setDefaultStream ( std::ostream stream)
inlineoverride

Definition at line 100 of file MessageSvc.h.

100  {
101  auto lock = std::scoped_lock{ m_reportMutex };
103  }

◆ setOutputLevel() [1/2]

void MessageSvc::setOutputLevel ( int  new_level)
override

Definition at line 558 of file MessageSvc.cpp.

558  {
559  // ---------------------------------------------------------------------------
560  m_outputLevel = new_level;
561 }

◆ setOutputLevel() [2/2]

void MessageSvc::setOutputLevel ( std::string_view  source,
int  new_level 
)
override

Definition at line 564 of file MessageSvc.cpp.

564  {
565  // ---------------------------------------------------------------------------
566  auto lock = std::scoped_lock{ m_thresholdMapMutex };
567 
568  // only write if we really have to...
569  auto i = m_thresholdMap.find( source );
570  if ( i == m_thresholdMap.end() ) {
571  m_thresholdMap.emplace( source, level );
572  } else if ( i->second != level ) {
573  i->second = level;
574  }
575 }

◆ setupColors()

void MessageSvc::setupColors ( Gaudi::Details::PropertyBase prop)
private

Definition at line 128 of file MessageSvc.cpp.

128  {
129  const auto& pname = prop.name();
130  int level =
131  ( pname == "fatalColorCode" ? MSG::FATAL
132  : pname == "errorColorCode" ? MSG::ERROR
133  : pname == "warningColorCode" ? MSG::WARNING
134  : pname == "infoColorCode" ? MSG::INFO
135  : pname == "debugColorCode" ? MSG::DEBUG
136  : pname == "verboseColorCode" ? MSG::VERBOSE
137  : pname == "alwaysColorCode"
138  ? MSG::ALWAYS
139  : ( throw GaudiException( "ERROR: Unknown message color parameter: " + pname, name(), StatusCode::FAILURE ),
140  -1 ) );
141 
142  auto& code = m_logColorCodes[level];
143 
144  const auto& col_desc = m_logColors[level].value();
145 
146  if ( col_desc.size() == 1 ) {
147  const std::string& desc = col_desc[0];
148  if ( desc.empty() ) {
149  code = "";
150  } else if ( desc[0] == '[' ) {
151  code = "\033" + desc;
152  } else {
153  code = "\033[" + colTrans( desc, 90 ) + ";1m";
154  }
155  } else if ( col_desc.size() == 2 ) {
156  code = "\033[" + colTrans( col_desc[0], 90 ) + ";" + colTrans( col_desc[1], 100 ) + ";1m";
157  } else { // empty desc: no color
158  code = "";
159  }
160 }

◆ setupInactCount()

void MessageSvc::setupInactCount ( Gaudi::Details::PropertyBase prop)
private

Definition at line 215 of file MessageSvc.cpp.

215  {
216  if ( prop.name() == "countInactive" ) {
217  Gaudi::Property<bool>* p = dynamic_cast<Gaudi::Property<bool>*>( &prop );
218  if ( p ) MsgStream::enableCountInactive( p->value() );
219  }
220 }

◆ setupLimits()

void MessageSvc::setupLimits ( Gaudi::Details::PropertyBase prop)
private

Definition at line 163 of file MessageSvc.cpp.

163  {
164  // Just report problems in the settings of the limits and unknown limit parameters
165  if ( prop.name() == "alwaysLimit" ) {
166  Gaudi::Property<int>* p = dynamic_cast<Gaudi::Property<int>*>( &prop );
167  if ( p && p->value() != 0 ) {
168  std::cout << "MessageSvc ERROR: cannot suppress ALWAYS messages" << std::endl;
169  p->setValue( 0 );
170  }
171  } else if ( prop.name() == "defaultLimit" ) {
172  for ( int i = MSG::VERBOSE; i < MSG::NUM_LEVELS; ++i ) {
173  if ( i != MSG::ALWAYS ) { m_msgLimit[i] = m_msgLimit[MSG::NIL].value(); }
174  }
175  } else if ( prop.name() != "fatalLimit" && prop.name() != "errorLimit" && prop.name() != "warningLimit" &&
176  prop.name() == "infoLimit" && prop.name() == "debugLimit" && prop.name() == "verboseLimit" ) {
177  std::cout << "MessageSvc ERROR: Unknown message limit parameter: " << prop.name() << std::endl;
178  return;
179  }
180 }

◆ setupLogStreams()

void MessageSvc::setupLogStreams ( )
private

Definition at line 603 of file MessageSvc.cpp.

603  {
604  // reset state
606 
607  // make the unique set of output filenames
608  std::set<std::string_view> outFileNames;
610  std::inserter( outFileNames, outFileNames.end() ),
611  []( const auto& p ) -> std::string_view { return p.second; } );
612  // map each unique filename to an ofstream
614  std::transform( outFileNames.begin(), outFileNames.end(), std::inserter( outStreams, outStreams.end() ),
615  []( std::string_view fname ) {
616  return std::pair{ fname, std::make_shared<std::ofstream>(
617  std::string{ fname }, std::ios_base::out | std::ios_base::trunc ) };
618  } );
619  // associate the stream to ofstream...
620  for ( auto& iProp : m_loggedStreamsName ) {
621  auto& stream = outStreams.at( iProp.second );
622  if ( stream->good() ) m_loggedStreams.emplace( iProp.first, stream );
623  }
624 }

◆ setupThreshold()

void MessageSvc::setupThreshold ( Gaudi::Details::PropertyBase prop)
private

Definition at line 183 of file MessageSvc.cpp.

183  {
184 
185  static const std::array<std::pair<const char*, MSG::Level>, 7> tbl{ { { "setFatal", MSG::FATAL },
186  { "setError", MSG::ERROR },
187  { "setWarning", MSG::WARNING },
188  { "setInfo", MSG::INFO },
189  { "setDebug", MSG::DEBUG },
190  { "setVerbose", MSG::VERBOSE },
191  { "setAlways", MSG::ALWAYS } } };
192 
193  auto i = std::find_if( std::begin( tbl ), std::end( tbl ),
194  [&]( const std::pair<const char*, MSG::Level>& t ) { return prop.name() == t.first; } );
195  if ( i == std::end( tbl ) ) {
196  std::cerr << "MessageSvc ERROR: Unknown message threshold parameter: " << prop.name() << std::endl;
197  return;
198  }
199  int ic = i->second;
200 
202  if ( !sap ) {
203  std::cerr << "could not dcast " << prop.name()
204  << " to a Gaudi::Property<std::vector<std::string>> (which it should be!)" << std::endl;
205  } else {
206  for ( auto& i : sap->value() ) setOutputLevel( i, ic );
207  }
208 }

◆ useColor()

bool MessageSvc::useColor ( ) const
inlineoverride

Definition at line 118 of file MessageSvc.h.

118 { return m_color; }

Member Data Documentation

◆ m_color

Gaudi::Property<bool> MessageSvc::m_color { this, "useColors", false, "" }
private

Definition at line 151 of file MessageSvc.h.

◆ m_defaultFormat

Gaudi::Property<std::string> MessageSvc::m_defaultFormat { this, "Format", Message::getDefaultFormat(), "" }
private

Definition at line 137 of file MessageSvc.h.

◆ m_defaultMessage

Message MessageSvc::m_defaultMessage
private

Default Message.

Definition at line 184 of file MessageSvc.h.

◆ m_defaultStream

std::ostream* MessageSvc::m_defaultStream = &std::cout
private

Pointer to the output stream.

Definition at line 183 of file MessageSvc.h.

◆ m_defaultTimeFormat

Gaudi::Property<std::string> MessageSvc::m_defaultTimeFormat { this, "timeFormat", Message::getDefaultTimeFormat(), "" }
private

Definition at line 138 of file MessageSvc.h.

◆ m_inactCount

Gaudi::Property<bool> MessageSvc::m_inactCount { this, "countInactive", false, &MessageSvc::setupInactCount, "" }
private

Definition at line 172 of file MessageSvc.h.

◆ m_inactiveMap

std::map<std::string, MsgAry, std::less<> > MessageSvc::m_inactiveMap
private

Definition at line 199 of file MessageSvc.h.

◆ m_logColorCodes

std::string MessageSvc::m_logColorCodes[MSG::NUM_LEVELS]
private

Definition at line 189 of file MessageSvc.h.

◆ m_logColors

std::array<Gaudi::Property<std::vector<std::string> >, MSG::NUM_LEVELS> MessageSvc::m_logColors
private
Initial value:
{ { { },
{ this, "verboseColorCode" },
{ this, "debugColorCode" },
{ this, "infoColorCode" },
{ this, "warningColorCode" },
{ this, "errorColorCode" },
{ this, "fatalColorCode" },
{ this, "alwaysColorCode" } } }

Definition at line 153 of file MessageSvc.h.

◆ m_loggedStreams

std::map<std::string, std::shared_ptr<std::ostream>, std::less<> > MessageSvc::m_loggedStreams
private

Definition at line 203 of file MessageSvc.h.

◆ m_loggedStreamsName

Gaudi::Property<std::map<std::string, std::string, std::less<> > > MessageSvc::m_loggedStreamsName
private
Initial value:
{
this, "loggedStreams", {}, "MessageStream sources we want to dump into a logfile" }

Definition at line 180 of file MessageSvc.h.

◆ m_messageMap

MessageMap MessageSvc::m_messageMap
private

Message map.

Definition at line 186 of file MessageSvc.h.

◆ m_messageMapMutex

std::recursive_mutex MessageSvc::m_messageMapMutex
mutableprivate

Mutex to synchronize multiple access to m_messageMap.

Definition at line 216 of file MessageSvc.h.

◆ m_msgCount

std::array<int, MSG::NUM_LEVELS> MessageSvc::m_msgCount
private

Definition at line 201 of file MessageSvc.h.

◆ m_msgLimit

std::array<Gaudi::Property<int>, MSG::NUM_LEVELS> MessageSvc::m_msgLimit
private
Initial value:
{ { { this, "defaultLimit", 500 },
{ this, "verboseLimit", 500 },
{ this, "debugLimit", 500 },
{ this, "infoLimit", 500 },
{ this, "warningLimit", 500 },
{ this, "errorLimit", 500 },
{ this, "fatalLimit", 500 },
{ this, "alwaysLimit", 0 } } }

Definition at line 162 of file MessageSvc.h.

◆ m_reportMutex

std::recursive_mutex MessageSvc::m_reportMutex
mutableprivate

Mutex to synchronize multiple threads printing.

Definition at line 213 of file MessageSvc.h.

◆ m_sourceMap

std::map<std::string, MsgAry, std::less<> > MessageSvc::m_sourceMap
private

Definition at line 199 of file MessageSvc.h.

◆ m_statLevel

Gaudi::Property<unsigned int> MessageSvc::m_statLevel { this, "statLevel", 0, "" }
private

Definition at line 140 of file MessageSvc.h.

◆ m_stats

Gaudi::Property<bool> MessageSvc::m_stats { this, "showStats", false, "" }
private

Definition at line 139 of file MessageSvc.h.

◆ m_streamMap

StreamMap MessageSvc::m_streamMap
private

Stream map.

Definition at line 185 of file MessageSvc.h.

◆ m_suppress

Gaudi::Property<bool> MessageSvc::m_suppress { this, "enableSuppression", false, "" }
private

Definition at line 171 of file MessageSvc.h.

◆ m_thresholdMap

ThresholdMap MessageSvc::m_thresholdMap
private

Output level threshold map.

Definition at line 187 of file MessageSvc.h.

◆ m_thresholdMapMutex

std::recursive_mutex MessageSvc::m_thresholdMapMutex
mutableprivate

Mutex to synchronize multiple access to m_thresholdMap (.

See also
MsgStream::doOutput).

Definition at line 220 of file MessageSvc.h.

◆ m_thresholdProp

std::array<Gaudi::Property<std::vector<std::string> >, MSG::NUM_LEVELS> MessageSvc::m_thresholdProp
private
Initial value:
{ { { },
{ this, "setVerbose" },
{ this, "setDebug" },
{ this, "setInfo" },
{ this, "setWarning" },
{ this, "setError" },
{ this, "setFatal" },
{ this, "setAlways" } } }

Definition at line 142 of file MessageSvc.h.

◆ m_tracedInactiveSources

Gaudi::Property<std::vector<std::string> > MessageSvc::m_tracedInactiveSources
private
Initial value:
{
this,
"tracedInactiveSources",
{},
"for each message source specified, print a stack trace for the unprotected and unseen messages" }

Definition at line 174 of file MessageSvc.h.


The documentation for this class was generated from the following files:
MSG::DEBUG
@ DEBUG
Definition: IMessageSvc.h:25
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: PropertyBase.h:35
std::ostringstream::width
T width(T... args)
Gaudi::Details::PropertyBase::name
const std::string name() const
property name
Definition: PropertyBase.h:39
std::lock
T lock(T... args)
MessageSvc::m_logColors
std::array< Gaudi::Property< std::vector< std::string > >, MSG::NUM_LEVELS > m_logColors
Definition: MessageSvc.h:153
std::for_each
T for_each(T... args)
Write.stream
stream
Definition: Write.py:32
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:118
MessageSvc::setupLimits
void setupLimits(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:163
precedence.message
message
Definition: precedence.py:19
std::string
STL class.
MessageSvc::m_stats
Gaudi::Property< bool > m_stats
Definition: MessageSvc.h:139
MsgStream::enableCountInactive
static GAUDI_API bool enableCountInactive(bool value=true)
Enable/disable the count of inactive messages.
Definition: MsgStream.cpp:41
Read.app
app
Definition: Read.py:36
std::move
T move(T... args)
Service::m_state
Gaudi::StateMachine::State m_state
Service state
Definition: Service.h:203
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:314
MSG::INFO
@ INFO
Definition: IMessageSvc.h:25
std::pair
MessageSvc::m_defaultTimeFormat
Gaudi::Property< std::string > m_defaultTimeFormat
Definition: MessageSvc.h:138
std::map::find
T find(T... args)
GaudiException
Definition: GaudiException.h:31
MessageSvc::reportMessage
void reportMessage(const Message &message) override
Definition: MessageSvc.cpp:397
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
std::multimap::emplace
T emplace(T... args)
MessageSvc::m_logColorCodes
std::string m_logColorCodes[MSG::NUM_LEVELS]
Definition: MessageSvc.h:189
MessageSvc::m_reportMutex
std::recursive_mutex m_reportMutex
Mutex to synchronize multiple threads printing.
Definition: MessageSvc.h:213
MSG::WARNING
@ WARNING
Definition: IMessageSvc.h:25
MessageSvc::i_reportMessage
virtual void i_reportMessage(const Message &msg, int outputLevel)
Internal implementation of reportMessage(const Message&,int) without lock.
Definition: MessageSvc.cpp:344
System::backTrace
GAUDI_API int backTrace(void **addresses, const int depth)
extends< Service, IMessageSvc, IInactiveMessageCounter >::base_class
extends base_class
Typedef to this class.
Definition: extends.h:24
std::multimap::clear
T clear(T... args)
std::fill
T fill(T... args)
Gaudi::Property::setValue
bool setValue(const ValueType &v)
Definition: Property.h:239
MessageSvc::m_streamMap
StreamMap m_streamMap
Stream map.
Definition: MessageSvc.h:185
MessageSvc::m_thresholdMapMutex
std::recursive_mutex m_thresholdMapMutex
Mutex to synchronize multiple access to m_thresholdMap (.
Definition: MessageSvc.h:220
MessageSvc::m_msgLimit
std::array< Gaudi::Property< int >, MSG::NUM_LEVELS > m_msgLimit
Definition: MessageSvc.h:162
bug_34121.t
t
Definition: bug_34121.py:31
Gaudi::Utils::begin
AttribStringParser::Iterator begin(const AttribStringParser &parser)
Definition: AttribStringParser.h:136
MessageSvc::m_statLevel
Gaudi::Property< unsigned int > m_statLevel
Definition: MessageSvc.h:140
Service::name
const std::string & name() const override
Retrieve name of the service
Definition: Service.cpp:332
StatusCode
Definition: StatusCode.h:65
Message
Definition: Message.h:26
std::map::at
T at(T... args)
ProduceConsume.j
j
Definition: ProduceConsume.py:104
std::cout
MessageSvc::m_sourceMap
std::map< std::string, MsgAry, std::less<> > m_sourceMap
Definition: MessageSvc.h:199
Gaudi::StateMachine::OFFLINE
@ OFFLINE
Definition: StateMachine.h:23
Gaudi::Property::declareUpdateHandler
Details::PropertyBase & declareUpdateHandler(std::function< void(Details::PropertyBase &)> fun) override
set new callback for update
Definition: Property.h:144
MessageSvc::m_msgCount
std::array< int, MSG::NUM_LEVELS > m_msgCount
Definition: MessageSvc.h:201
Gaudi::Property::value
const ValueType & value() const
Definition: Property.h:237
std::to_string
T to_string(T... args)
Message::setFormat
void setFormat(std::string msg) const
Set the format string.
Definition: Message.cpp:97
std::array
STL class.
MessageSvc::m_defaultMessage
Message m_defaultMessage
Default Message.
Definition: MessageSvc.h:184
MessageSvc::m_thresholdMap
ThresholdMap m_thresholdMap
Output level threshold map.
Definition: MessageSvc.h:187
std::ostringstream::setf
T setf(T... args)
std::flush
T flush(T... args)
std::multimap::erase
T erase(T... args)
SmartIF< IAppMgrUI >
std::map
STL class.
MessageSvc::m_defaultStream
std::ostream * m_defaultStream
Pointer to the output stream.
Definition: MessageSvc.h:183
MessageSvc::m_messageMap
MessageMap m_messageMap
Message map.
Definition: MessageSvc.h:186
MessageSvc::setupThreshold
void setupThreshold(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:183
gaudirun.level
level
Definition: gaudirun.py:364
std::transform
T transform(T... args)
MessageSvc::m_tracedInactiveSources
Gaudi::Property< std::vector< std::string > > m_tracedInactiveSources
Definition: MessageSvc.h:174
MSG::FATAL
@ FATAL
Definition: IMessageSvc.h:25
MessageSvc::m_inactiveMap
std::map< std::string, MsgAry, std::less<> > m_inactiveMap
Definition: MessageSvc.h:199
MessageSvc::outputLevel
int outputLevel() const override
Definition: MessageSvc.cpp:544
std::ostringstream
STL class.
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
MessageSvc::m_inactCount
Gaudi::Property< bool > m_inactCount
Definition: MessageSvc.h:172
std::multimap::equal_range
T equal_range(T... args)
gaudirun.type
type
Definition: gaudirun.py:160
MSG::VERBOSE
@ VERBOSE
Definition: IMessageSvc.h:25
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
std::endl
T endl(T... args)
MessageSvc::m_messageMapMutex
std::recursive_mutex m_messageMapMutex
Mutex to synchronize multiple access to m_messageMap.
Definition: MessageSvc.h:216
MessageSvc::NamedStream
std::pair< std::string, std::ostream * > NamedStream
Definition: MessageSvc.h:42
MessageSvc::m_loggedStreamsName
Gaudi::Property< std::map< std::string, std::string, std::less<> > > m_loggedStreamsName
Definition: MessageSvc.h:180
MSG::ALWAYS
@ ALWAYS
Definition: IMessageSvc.h:25
std::begin
T begin(T... args)
MSG::NIL
@ NIL
Definition: IMessageSvc.h:25
Gaudi::StateMachine::INITIALIZED
@ INITIALIZED
Definition: StateMachine.h:25
ProduceConsume.Message
Message
Definition: ProduceConsume.py:110
MSG::ERROR
@ ERROR
Definition: IMessageSvc.h:25
std::map::empty
T empty(T... args)
MessageSvc::m_color
Gaudi::Property< bool > m_color
Definition: MessageSvc.h:151
StatusCode::getCode
code_t getCode() const
Retrieve value.
Definition: StatusCode.h:136
compareOutputFiles.pname
pname
Definition: compareOutputFiles.py:482
MessageSvc::m_loggedStreams
std::map< std::string, std::shared_ptr< std::ostream >, std::less<> > m_loggedStreams
Definition: MessageSvc.h:203
std::ostringstream::str
T str(T... args)
MessageSvc::initialize
StatusCode initialize() override
Initialize Service.
Definition: MessageSvc.cpp:101
std::end
T end(T... args)
IOTest.end
end
Definition: IOTest.py:125
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
MessageSvc::m_thresholdProp
std::array< Gaudi::Property< std::vector< std::string > >, MSG::NUM_LEVELS > m_thresholdProp
Definition: MessageSvc.h:142
MessageSvc::setupLogStreams
void setupLogStreams()
Definition: MessageSvc.cpp:603
MessageSvc::m_suppress
Gaudi::Property< bool > m_suppress
Definition: MessageSvc.h:171
MSG::NUM_LEVELS
@ NUM_LEVELS
Definition: IMessageSvc.h:25
std::inserter
T inserter(T... args)
MessageSvc::m_defaultFormat
Gaudi::Property< std::string > m_defaultFormat
Definition: MessageSvc.h:137
MessageSvc::setOutputLevel
void setOutputLevel(int new_level) override
Definition: MessageSvc.cpp:558
ProduceConsume.key
key
Definition: ProduceConsume.py:84
Service::m_outputLevel
Gaudi::Property< int > m_outputLevel
flag indicating whether ToolHandle tools have been added to m_tools
Definition: Service.h:232
std::set
STL class.
Gaudi::Property< bool >
Gaudi::Functional::details::zip::range
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
Definition: details.h:97
MessageSvc::setupColors
void setupColors(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:128