@@ -452,6 +452,41 @@ class InfoLogger::Impl
452452 floodFile_msg_drop=0 ;
453453 }
454454
455+ // message statistics
456+ static const unsigned int numberOfSeverities = 5 ;
457+ std::atomic<unsigned long > messageCountPerSeverity[numberOfSeverities + 1 ] = {};
458+
459+ int getIndexFromSeverity (InfoLogger::Severity s) {
460+ switch (s) {
461+ case InfoLogger::Severity::Undefined: // undefined counted as 'info', as in defaultMsg
462+ case InfoLogger::Severity::Info:
463+ return 1 ;
464+ case InfoLogger::Severity::Error:
465+ return 2 ;
466+ case InfoLogger::Severity::Fatal:
467+ return 3 ;
468+ case InfoLogger::Severity::Warning:
469+ return 4 ;
470+ case InfoLogger::Severity::Debug:
471+ return 5 ;
472+ }
473+ return 0 ;
474+ }
475+
476+ unsigned long getMessageCount (InfoLogger::Severity severity) {
477+ // when severity "undefined", return the grand total
478+ if (severity == InfoLogger::Severity::Undefined) {
479+ return messageCountPerSeverity[0 ].load ();
480+ }
481+ return messageCountPerSeverity[getIndexFromSeverity (severity)].load ();
482+ }
483+
484+ void resetMessageCount () {
485+ for (int i=0 ; i<=numberOfSeverities; i++) {
486+ messageCountPerSeverity[i] = 0 ;
487+ }
488+ }
489+
455490};
456491
457492void InfoLogger::Impl::refreshDefaultMsg ()
@@ -595,6 +630,11 @@ int InfoLogger::Impl::pushMessage(const InfoLoggerMessageOption& options, const
595630 InfoLoggerMessageHelperSetValue (msg, msgHelper.ix_username , String, context.userName .c_str ());
596631 }
597632
633+ // message stats: after filter, before flood protection
634+ // NB: "Undefined" to be counted as "Info", as in defaultMsg. Translated correctly by getIndexFromSeverity.
635+ messageCountPerSeverity[0 ]++;
636+ messageCountPerSeverity[getIndexFromSeverity (options.severity )]++;
637+
598638 if (flood_protection) {
599639
600640 // update message statistics */
@@ -1188,6 +1228,14 @@ int InfoLogger::log(AutoMuteToken &limit, const char* message, ...) {
11881228 return err;
11891229}
11901230
1231+ unsigned long InfoLogger::getMessageCount (InfoLogger::Severity severity) {
1232+ return mPimpl ->getMessageCount (severity);
1233+ }
1234+
1235+ void InfoLogger::resetMessageCount () {
1236+ mPimpl ->resetMessageCount ();
1237+ }
1238+
11911239// end of namespace
11921240} // namespace InfoLogger
11931241} // namespace AliceO2
0 commit comments