The Gaudi Framework  v36r1 (3e2fb5a8)
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...
 
StatusCode setProperties ()
 
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 {this, "AutoRetrieveTools", true, "retrieve all AlgTools during initialize"}
 
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 82 of file MessageSvc.cpp.

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

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

528  {
529  auto lock = std::scoped_lock{m_messageMapMutex};
531 }

◆ eraseMessage() [2/3]

void MessageSvc::eraseMessage ( const StatusCode code)
override

Definition at line 540 of file MessageSvc.cpp.

540  {
541  auto lock = std::scoped_lock{m_messageMapMutex};
543 }

◆ eraseMessage() [3/3]

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

Definition at line 552 of file MessageSvc.cpp.

552  {
553  auto lock = std::scoped_lock{m_messageMapMutex};
554 
556  [&]( MessageMap::const_reference j ) { return j.second == msg; } );
557 }

◆ eraseStream() [1/4]

void MessageSvc::eraseStream ( )
override

Definition at line 471 of file MessageSvc.cpp.

471 { m_streamMap.clear(); }

◆ eraseStream() [2/4]

void MessageSvc::eraseStream ( int  message_type)
override

Definition at line 480 of file MessageSvc.cpp.

480 { m_streamMap.erase( message_type ); }

◆ eraseStream() [3/4]

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

Definition at line 489 of file MessageSvc.cpp.

489  {
490  if ( stream ) {
491  erase_if( m_streamMap, m_streamMap.equal_range( key ),
492  [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
493  }
494 }

◆ eraseStream() [4/4]

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

Definition at line 503 of file MessageSvc.cpp.

503  {
504  if ( stream ) {
505  erase_if( m_streamMap, [&]( StreamMap::const_reference j ) { return j.second.second == stream; } );
506  }
507 }

◆ finalize()

StatusCode MessageSvc::finalize ( )
override

Finalize Service.

Definition at line 241 of file MessageSvc.cpp.

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

◆ getLogColor()

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

Definition at line 594 of file MessageSvc.cpp.

594  {
595  // ---------------------------------------------------------------------------
596  return ( logLevel < MSG::NUM_LEVELS ) ? m_logColorCodes[logLevel] : "";
597 }

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

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

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

436  {
437  int level = outputLevel( source );
438  auto report = [&]( Message mesg ) {
439  mesg.setSource( source );
440  Message stat_code( std::string{source}, mesg.getType(), "Status Code " + std::to_string( code.getCode() ) );
441  i_reportMessage( std::move( stat_code ), level );
442  i_reportMessage( std::move( mesg ), level );
443  };
444 
445  auto range = m_messageMap.equal_range( code );
446  if ( range.first != m_messageMap.end() ) {
447  std::for_each( range.first, range.second, [&]( MessageMap::const_reference sm ) { report( sm.second ); } );
448  } else {
449  report( m_defaultMessage );
450  }
451 }

◆ incrInactiveCount()

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

Definition at line 603 of file MessageSvc.cpp.

603  {
604  auto entry = m_inactiveMap.find( source );
605  if ( entry == m_inactiveMap.end() ) { entry = m_inactiveMap.emplace( source, MsgAry{} ).first; }
606  ++entry->second.msg[level];
607 
610  std::cout << "== inactive message detected from " << source << " ==\n";
611  std::string t;
612  System::backTrace( t, 25, 0 );
613  std::cout << t << std::endl;
614  }
615 }

◆ initialize()

StatusCode MessageSvc::initialize ( )
override

Initialize Service.

Definition at line 110 of file MessageSvc.cpp.

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

◆ insertMessage()

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

Definition at line 516 of file MessageSvc.cpp.

516  {
517  auto lock = std::scoped_lock{m_messageMapMutex};
519 }

◆ insertStream()

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

Definition at line 460 of file MessageSvc.cpp.

460  {
462 }

◆ messageCount()

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

Definition at line 600 of file MessageSvc.cpp.

600 { return m_msgCount[level]; }

◆ outputLevel() [1/2]

int MessageSvc::outputLevel ( ) const
override

Definition at line 560 of file MessageSvc.cpp.

560  {
561  // ---------------------------------------------------------------------------
562  return m_outputLevel;
563 }

◆ outputLevel() [2/2]

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

Definition at line 566 of file MessageSvc.cpp.

566  {
567  // ---------------------------------------------------------------------------
568  auto lock = std::scoped_lock{m_thresholdMapMutex};
569  auto it = m_thresholdMap.find( source );
570  return it != m_thresholdMap.end() ? it->second : m_outputLevel.value();
571 }

◆ reinitialize()

StatusCode MessageSvc::reinitialize ( )
override

Reinitialize Service.

Definition at line 127 of file MessageSvc.cpp.

127  {
129  StatusCode sc = initialize();
131 
132  return sc;
133 }

◆ reportMessage() [1/4]

void MessageSvc::reportMessage ( const Message message)
override

Definition at line 413 of file MessageSvc.cpp.

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

◆ reportMessage() [2/4]

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

Definition at line 355 of file MessageSvc.cpp.

355  {
356  auto lock = std::scoped_lock{m_reportMutex};
358 }

◆ reportMessage() [3/4]

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

Definition at line 431 of file MessageSvc.cpp.

431  {
432  auto lock = std::scoped_lock{m_messageMapMutex};
433  i_reportMessage( code, source );
434 }

◆ reportMessage() [4/4]

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

Definition at line 421 of file MessageSvc.cpp.

421  {
423 }

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

574  {
575  // ---------------------------------------------------------------------------
576  m_outputLevel = new_level;
577 }

◆ setOutputLevel() [2/2]

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

Definition at line 580 of file MessageSvc.cpp.

580  {
581  // ---------------------------------------------------------------------------
582  auto lock = std::scoped_lock{m_thresholdMapMutex};
583 
584  // only write if we really have to...
585  auto i = m_thresholdMap.find( source );
586  if ( i == m_thresholdMap.end() ) {
587  m_thresholdMap.emplace( source, level );
588  } else if ( i->second != level ) {
589  i->second = level;
590  }
591 }

◆ setupColors()

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

Definition at line 137 of file MessageSvc.cpp.

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

◆ setupInactCount()

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

Definition at line 231 of file MessageSvc.cpp.

231  {
232  if ( prop.name() == "countInactive" ) {
233  Gaudi::Property<bool>* p = dynamic_cast<Gaudi::Property<bool>*>( &prop );
234  if ( p ) MsgStream::enableCountInactive( p->value() );
235  }
236 }

◆ setupLimits()

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

Definition at line 179 of file MessageSvc.cpp.

179  {
180  // Just report problems in the settings of the limits and unknown limit parameters
181  if ( prop.name() == "alwaysLimit" ) {
182  Gaudi::Property<int>* p = dynamic_cast<Gaudi::Property<int>*>( &prop );
183  if ( p && p->value() != 0 ) {
184  std::cout << "MessageSvc ERROR: cannot suppress ALWAYS messages" << std::endl;
185  p->setValue( 0 );
186  }
187  } else if ( prop.name() == "defaultLimit" ) {
188  for ( int i = MSG::VERBOSE; i < MSG::NUM_LEVELS; ++i ) {
189  if ( i != MSG::ALWAYS ) { m_msgLimit[i] = m_msgLimit[MSG::NIL].value(); }
190  }
191  } else if ( prop.name() != "fatalLimit" && prop.name() != "errorLimit" && prop.name() != "warningLimit" &&
192  prop.name() == "infoLimit" && prop.name() == "debugLimit" && prop.name() == "verboseLimit" ) {
193  std::cout << "MessageSvc ERROR: Unknown message limit parameter: " << prop.name() << std::endl;
194  return;
195  }
196 }

◆ setupLogStreams()

void MessageSvc::setupLogStreams ( )
private

Definition at line 619 of file MessageSvc.cpp.

619  {
620  // reset state
622 
623  // make the unique set of output filenames
624  std::set<std::string_view> outFileNames;
626  std::inserter( outFileNames, outFileNames.end() ),
627  []( const auto& p ) -> std::string_view { return p.second; } );
628  // map each unique filename to an ofstream
630  std::transform( outFileNames.begin(), outFileNames.end(), std::inserter( outStreams, outStreams.end() ),
631  []( std::string_view fname ) {
632  return std::pair{fname, std::make_shared<std::ofstream>(
633  std::string{fname}, std::ios_base::out | std::ios_base::trunc )};
634  } );
635  // associate the stream to ofstream...
636  for ( auto& iProp : m_loggedStreamsName ) {
637  auto& stream = outStreams.at( iProp.second );
638  if ( stream->good() ) m_loggedStreams.emplace( iProp.first, stream );
639  }
640 }

◆ setupThreshold()

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

Definition at line 199 of file MessageSvc.cpp.

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

◆ 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:21
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:31
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:118
MessageSvc::setupLimits
void setupLimits(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:179
compareOutputFiles.pname
string pname
Definition: compareOutputFiles.py:482
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:35
std::move
T move(T... args)
Service::m_state
Gaudi::StateMachine::State m_state
Service state
Definition: Service.h:206
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:355
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:413
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:18
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:360
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:242
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:30
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:27
std::map::at
T at(T... args)
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
Backward compatibility (.
Definition: Property.h:240
std::to_string
T to_string(T... args)
Message::setFormat
void setFormat(std::string msg) const
Set the format string.
Definition: Message.cpp:153
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:199
gaudirun.level
level
Definition: gaudirun.py:346
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:560
std::ostringstream
STL class.
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:142
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:154
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
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 ("checks" the StatusCode)
Definition: StatusCode.h:149
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:110
std::end
T end(T... args)
IOTest.end
end
Definition: IOTest.py:123
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:619
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:574
ProduceConsume.key
key
Definition: ProduceConsume.py:52
Service::m_outputLevel
Gaudi::Property< int > m_outputLevel
flag indicating whether ToolHandle tools have been added to m_tools
Definition: Service.h:235
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: FunctionalDetails.h:97
MessageSvc::setupColors
void setupColors(Gaudi::Details::PropertyBase &prop)
Definition: MessageSvc.cpp:137