43 if (c.substr(0, 4) !=
"Run:")
45 std::istringstream is(c);
51 if (runWord !=
"Run:")
55 is >> eventWord >>
event;
58 if (eventWord !=
"Event:")
60 std::ostringstream os;
61 os << run <<
"/" <<
event;
66 using namespace edm::messagelogger;
75 ELstatistics::ELstatistics()
80 termStream(std::
cerr),
81 printAtTermination(
true) {
82 #ifdef ELstatisticsCONSTRUCTOR_TRACE
83 std::cerr <<
"Constructor for ELstatistics()\n";
90 #ifdef ELstatisticsCONSTRUCTOR_TRACE
91 std::cerr <<
"Constructor for ELstatistics(osp)\n";
98 tableLimit(spaceLimit),
101 termStream(std::
cerr),
102 printAtTermination(
true) {
103 #ifdef ELstatisticsCONSTRUCTOR_TRACE
104 std::cerr <<
"Constructor for ELstatistics(spaceLimit)\n";
111 tableLimit(spaceLimit),
115 printAtTermination(
true) {
116 #ifdef ELstatisticsCONSTRUCTOR_TRACE
117 std::cerr <<
"Constructor for ELstatistics(spaceLimit,osp)\n";
124 tableLimit(orig.tableLimit),
126 updatedStats(orig.updatedStats),
127 termStream(orig.termStream),
128 printAtTermination(orig.printAtTermination) {
129 #ifdef ELstatisticsCONSTRUCTOR_TRACE
130 std::cerr <<
"Copy constructor for ELstatistics()\n";
141 #ifdef ELstatisticsCONSTRUCTOR_TRACE
142 std::cerr <<
"Destructor for ELstatistics\n";
155 #ifdef ELstatsLOG_TRACE
156 std::cerr <<
" =:=:=: Log to an ELstatistics\n";
168 ELmap_stats::iterator
s =
stats.find(msg.
xid());
169 if (s ==
stats.end()) {
175 #ifdef ELstatsLOG_TRACE
176 std::cerr <<
" =:=:=: Message accounted for in stats \n";
178 if (s !=
stats.end()) {
182 #ifdef ELstatsLOG_TRACE
191 #ifdef ELstatsLOG_TRACE
192 std::cerr <<
" =:=:=: log(msg) done (stats) \n";
201 ELmap_stats::iterator
s;
204 (*s).second.context1 = (*s).second.context2 = (*s).second.contextLast =
"";
226 std::ostringstream
s;
235 part3() :
n(0
L),
t(0
L) { ; }
240 for (ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i) {
251 s <<
" type category sev module "
252 "subroutine count total\n"
253 <<
" ---- -------------------- -- ---------------- "
254 "---------------- ----- -----\n";
258 s << right << std::setw(5) << ++n <<
' ' << left << std::setw(20) << (*i).first.id.substr(0, 20) <<
' ' << left
259 << std::setw(2) << (*i).first.severity.getSymbol() <<
' ' << left << std::setw(16)
260 << (*i).first.module.substr(0, 16) <<
' ' << left << std::setw(16) << (*i).first.subroutine.substr(0, 16)
261 << right << std::setw(7) << (*i).second.n << left << std::setw(1) << ((*i).second.ignoredFlag ?
'*' :
' ')
262 << right << std::setw(8) << (*i).second.aggregateN <<
'\n';
263 ftnote = ftnote || (*i).second.ignoredFlag;
275 int groupAggregateN = 0;
277 bool groupIgnored =
true;
278 for (ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i) {
279 if ((*i).first.id == *
g) {
281 severityLevel = (*i).first.severity;
282 groupIgnored &= (*i).second.ignoredFlag;
283 groupAggregateN += (*i).second.aggregateN;
287 if (groupTotal > 0) {
290 s << right << std::setw(5) << ++n <<
' ' << left << std::setw(20) << (*g).substr(0, 20) <<
' ' << left
291 << std::setw(2) << severityLevel.getSymbol() <<
' ' << left << std::setw(16) <<
" <Any Module> " <<
' '
292 << left << std::setw(16) <<
"<Any Function>" << right << std::setw(7) << groupTotal << left << std::setw(1)
293 << (groupIgnored ?
'*' :
' ') << right << std::setw(8) << groupAggregateN <<
'\n';
294 ftnote = ftnote || groupIgnored;
299 p3[lev].n += groupTotal;
300 p3[lev].t += groupAggregateN;
307 s <<
"\n* Some occurrences of this message"
308 " were suppressed in all logs, due to limits.\n";
313 for (ELmap_stats::const_iterator
i = stats.begin();
i != stats.end(); ++
i) {
320 <<
" type category Examples: "
321 "run/evt run/evt run/evt\n"
322 <<
" ---- -------------------- ----"
323 "------------ ---------------- ----------------\n";
325 s << right << std::setw(5) << ++n <<
' ' << left << std::setw(20) << (*i).first.id.c_str() <<
' ' << left
326 << std::setw(16) << (*i).second.context1.c_str() <<
' ' << left << std::setw(16)
327 << (*i).second.context2.c_str() <<
' ' << (*i).second.contextLast.c_str() <<
'\n';
332 s <<
"\nSeverity # Occurrences Total Occurrences\n"
333 <<
"-------- ------------- -----------------\n";
335 if (p3[
k].n != 0 || p3[
k].
t != 0) {
337 << std::setw(17) << p3[
k].n << right << std::setw(20) << p3[
k].t <<
'\n';
352 termStream <<
"\n=============================================\n\n"
353 <<
"MessageLogger Summary" << std::endl
355 <<
"dropped waiting message count " << overfullWaitCount << std::endl
364 return std::map<ELextendedID, StatsCount>(
stats);
371 part3() :
n(0
L),
t(0
L) { ; }
378 for (ELmap_stats::const_iterator
i =
stats.begin();
i !=
stats.end(); ++
i) {
387 std::ostringstream
s;
389 std::string sevSymbol = (*i).first.severity.getSymbol();
390 if (sevSymbol[0] ==
'-')
391 sevSymbol = sevSymbol.substr(1);
392 s << sevSymbol <<
"_" << (*i).first.id;
393 int n = (*i).second.aggregateN;
395 if (sm.find(catstr) != sm.end()) {
410 int groupAggregateN = 0;
412 for (ELmap_stats::const_iterator
i =
stats.begin();
i !=
stats.end(); ++
i) {
413 if ((*i).first.id == *
g) {
415 severityLevel = (*i).first.severity;
416 groupAggregateN += (*i).second.aggregateN;
420 if (groupTotal > 0) {
423 std::ostringstream
s;
426 if (sevSymbol[0] ==
'-')
427 sevSymbol = sevSymbol.substr(1);
428 s << sevSymbol <<
"_" << *
g;
429 int n = groupAggregateN;
431 if (sm.find(catstr) != sm.end()) {
440 p3[lev].n += groupTotal;
441 p3[lev].t += groupAggregateN;
454 if (sevName ==
"Severe")
456 if (sevName ==
"Success")
460 if (sevName !=
"UnusedSeverity") {
461 sm[sevName] = p3[
k].t;
470 return "LogDebug_LogTrace";
472 return "LogInfo_LogVerbatim";
473 if (s ==
"LogWarning")
474 return "LogWarnng_LogPrint";
476 return "LogError_LogProblem";
477 if (s ==
"LogSystem")
478 return "LogSystem_LogAbsolute";
479 return "UnusedSeverity";
static std::set< std::string > groupedCategories
messagelogger::ELseverityLevel severity
const edm::EventSetup & c
std::unordered_set< std::string > ignoreThese
std::map< ELextendedID, StatsCount > statisticsMap() const
std::string dualLogName(std::string const &s)
std::string_view getName() const noexcept
const std::string & context() const
std::ostream & termStream
void noTerminationSummary()
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
constexpr int getLevel() const noexcept
void summary(unsigned long overfullWaitCount)
const ELextendedID & xid() const
constexpr int getLevel() const noexcept
virtual bool thisShouldBeIgnored(std::string const &s) const
static void noteGroupedCategory(std::string const &cat)
std::unordered_set< std::string > respondToThese
bool log(const edm::ErrorObj &msg) override
bool respondToMostModules
void summaryForJobReport(std::map< std::string, double > &sm)
messagelogger::ELseverityLevel threshold
static std::string formSummary(ELmap_stats &stats)
std::map< ELextendedID, StatsCount > ELmap_stats