The Gaudi Framework  master (594c33fa)
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, 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 78 of file MessageSvc.cpp.

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

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 517 of file MessageSvc.cpp.

517  {
518  auto lock = std::scoped_lock{ m_messageMapMutex };
520 }

◆ eraseMessage() [2/3]

void MessageSvc::eraseMessage ( const StatusCode code)
override

Definition at line 529 of file MessageSvc.cpp.

529  {
530  auto lock = std::scoped_lock{ m_messageMapMutex };
532 }

◆ eraseMessage() [3/3]

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

Definition at line 541 of file MessageSvc.cpp.

541  {
542  auto lock = std::scoped_lock{ m_messageMapMutex };
543 
545  [&]( MessageMap::const_reference j ) { return j.second == msg; } );
546 }

◆ eraseStream() [1/4]

void MessageSvc::eraseStream ( )
override

Definition at line 460 of file MessageSvc.cpp.

460 { m_streamMap.clear(); }

◆ eraseStream() [2/4]

void MessageSvc::eraseStream ( int  message_type)
override

Definition at line 469 of file MessageSvc.cpp.

469 { m_streamMap.erase( message_type ); }

◆ eraseStream() [3/4]

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

Definition at line 478 of file MessageSvc.cpp.

478  {
479  if ( stream ) {
480  erase_if( m_streamMap, m_streamMap.equal_range( key ),
481  [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
482  }
483 }

◆ eraseStream() [4/4]

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

Definition at line 492 of file MessageSvc.cpp.

492  {
493  if ( stream ) {
494  erase_if( m_streamMap, [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
495  }
496 }

◆ finalize()

StatusCode MessageSvc::finalize ( )
override

Finalize Service.

Definition at line 230 of file MessageSvc.cpp.

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

◆ getLogColor()

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

Definition at line 583 of file MessageSvc.cpp.

583  {
584  // ---------------------------------------------------------------------------
585  return ( logLevel < MSG::NUM_LEVELS ) ? m_logColorCodes[logLevel] : "";
586 }

◆ 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 349 of file MessageSvc.cpp.

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

◆ 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 425 of file MessageSvc.cpp.

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

◆ incrInactiveCount()

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

Definition at line 592 of file MessageSvc.cpp.

592  {
593  auto entry = m_inactiveMap.find( source );
594  if ( entry == m_inactiveMap.end() ) { entry = m_inactiveMap.emplace( source, MsgAry{} ).first; }
595  ++entry->second.msg[level];
596 
599  std::cout << "== inactive message detected from " << source << " ==\n";
600  std::string t;
601  System::backTrace( t, 25, 0 );
602  std::cout << t << std::endl;
603  }
604 }

◆ initialize()

StatusCode MessageSvc::initialize ( )
override

Initialize Service.

Definition at line 106 of file MessageSvc.cpp.

106  {
108  if ( sc.isFailure() ) return sc;
109 
110 #ifdef _WIN32
111  m_color = false;
112 #endif
113 
114  // make sure the map of logged stream names is initialized
115  setupLogStreams();
116 
117  return StatusCode::SUCCESS;
118 }

◆ insertMessage()

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

Definition at line 505 of file MessageSvc.cpp.

505  {
506  auto lock = std::scoped_lock{ m_messageMapMutex };
508 }

◆ insertStream()

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

Definition at line 449 of file MessageSvc.cpp.

449  {
451 }

◆ messageCount()

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

Definition at line 589 of file MessageSvc.cpp.

589 { return m_msgCount[level]; }

◆ outputLevel() [1/2]

int MessageSvc::outputLevel ( ) const
override

Definition at line 549 of file MessageSvc.cpp.

549  {
550  // ---------------------------------------------------------------------------
551  return m_outputLevel;
552 }

◆ outputLevel() [2/2]

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

Definition at line 555 of file MessageSvc.cpp.

555  {
556  // ---------------------------------------------------------------------------
557  auto lock = std::scoped_lock{ m_thresholdMapMutex };
558  auto it = m_thresholdMap.find( source );
559  return it != m_thresholdMap.end() ? it->second : m_outputLevel.value();
560 }

◆ reinitialize()

StatusCode MessageSvc::reinitialize ( )
override

Reinitialize Service.

Definition at line 123 of file MessageSvc.cpp.

123  {
125  StatusCode sc = initialize();
127 
128  return sc;
129 }

◆ reportMessage() [1/4]

void MessageSvc::reportMessage ( const Message message)
override

Definition at line 402 of file MessageSvc.cpp.

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

◆ reportMessage() [2/4]

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

Definition at line 344 of file MessageSvc.cpp.

344  {
345  auto lock = std::scoped_lock{ m_reportMutex };
347 }

◆ reportMessage() [3/4]

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

Definition at line 420 of file MessageSvc.cpp.

420  {
421  auto lock = std::scoped_lock{ m_messageMapMutex };
422  i_reportMessage( code, source );
423 }

◆ reportMessage() [4/4]

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

Definition at line 410 of file MessageSvc.cpp.

410  {
411  reportMessage( Message{ std::move( source ), type, std::move( message ) } );
412 }

◆ 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 563 of file MessageSvc.cpp.

563  {
564  // ---------------------------------------------------------------------------
565  m_outputLevel = new_level;
566 }

◆ setOutputLevel() [2/2]

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

Definition at line 569 of file MessageSvc.cpp.

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

◆ setupColors()

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

Definition at line 133 of file MessageSvc.cpp.

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

◆ setupInactCount()

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

Definition at line 220 of file MessageSvc.cpp.

220  {
221  if ( prop.name() == "countInactive" ) {
222  Gaudi::Property<bool>* p = dynamic_cast<Gaudi::Property<bool>*>( &prop );
223  if ( p ) MsgStream::enableCountInactive( p->value() );
224  }
225 }

◆ setupLimits()

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

Definition at line 168 of file MessageSvc.cpp.

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

◆ setupLogStreams()

void MessageSvc::setupLogStreams ( )
private

Definition at line 608 of file MessageSvc.cpp.

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

◆ setupThreshold()

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

Definition at line 188 of file MessageSvc.cpp.

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

◆ 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
GaudiHive.precedence.message
message
Definition: precedence.py:19
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:168
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
std::move
T move(T... args)
Service::m_state
Gaudi::StateMachine::State m_state
Service state
Definition: Service.h:200
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:402
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:349
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:241
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
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:101
std::cout
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
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:146
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:239
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
event_timeout_check.app
app
Definition: event_timeout_check.py:41
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:188
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:549
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:107
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:106
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:608
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:563
ProduceConsume.key
key
Definition: ProduceConsume.py:81
Service::m_outputLevel
Gaudi::Property< int > m_outputLevel
flag indicating whether ToolHandle tools have been added to m_tools
Definition: Service.h:229
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:98
MessageSvc::setupColors
void setupColors(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:133