Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
mf::service::ELdestination Class Reference

#include <ELdestination.h>

Inheritance diagram for mf::service::ELdestination:
mf::service::ELostreamOutput mf::service::ELstatistics mfplugins::ELsyslog

Classes

struct  Category
 
struct  CategoryParams
 
struct  Config
 
class  MsgFormatSettings
 
class  MsgStatistics
 
struct  StatsCount
 
struct  XidLimiter
 

Public Types

enum  flag_enum {
  NO_LINE_BREAKS, TIMESTAMP, MILLISECOND, MODULE,
  SUBROUTINE, TEXT, SOME_CONTEXT, SERIAL,
  FULL_CONTEXT, TIME_SEPARATE, EPILOGUE_SEPARATE, NFLAGS
}
 

Public Member Functions

virtual ~ELdestination () noexcept=default
 
 ELdestination (Config const &)
 
 ELdestination (ELdestination const &)=delete
 
 ELdestination (ELdestination &&)=delete
 
ELdestinationoperator= (ELdestination const &)=delete
 
ELdestinationoperator= (ELdestination &&)=delete
 
void setThreshold (ELseverityLevel sv)
 
virtual void log (mf::ErrorObj &)
 
virtual void finish ()
 
virtual void summary ()
 

Protected Member Functions

std::string summarizeContext (std::string const &)
 
void emitToken (std::ostream &os, std::string const &s, bool nl=false, bool preambleMode=false)
 
std::string formSummary ()
 
bool skipMsg (ELextendedID const &)
 
void resetLimiters ()
 
void resetMsgCounters ()
 
virtual void fillPrefix (std::ostringstream &, mf::ErrorObj const &msg)
 
virtual void fillUsrMsg (std::ostringstream &, mf::ErrorObj const &msg)
 
virtual void fillSuffix (std::ostringstream &, mf::ErrorObj const &msg)
 
virtual void routePayload (std::ostringstream const &, mf::ErrorObj const &msg)
 
virtual void flush ()
 

Protected Attributes

ELseverityLevel threshold_
 
MsgFormatSettings format_
 
int defaultLimit_
 
int defaultReportEvery_
 
int defaultTimespan_
 
std::map< std::string const, CategoryParamscategoryParams_
 
std::map< ELextendedID const, XidLimiterxidLimiters_
 
std::map< ELextendedID const, StatsCountstatsMap_
 
bool outputStatistics_ {false}
 
bool updatedStats_ {false}
 
bool reset_ {false}
 

Private Attributes

std::size_t charsOnLine_ {}
 

Detailed Description

Definition at line 24 of file ELdestination.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

virtual mf::service::ELdestination::~ELdestination ( )
virtualdefaultnoexcept
mf::service::ELdestination::ELdestination ( Config const &  pset)

Definition at line 272 of file ELdestination.cc.

273  : threshold_{pset.threshold()}
274  , format_{pset.format()}
276  , defaultReportEvery_{-1}
278  , categoryParams_{}
279  , xidLimiters_{}
280  , statsMap_{}
281  , outputStatistics_{pset.outputStatistics()}
282  , updatedStats_{false}
283  , reset_{pset.msgStatistics().reset() ||
284  pset.msgStatistics().resetStatistics()}
285  , charsOnLine_{}
286  {
287  vector<string> configuration_errors;
288  // Grab this destination's category configurations.
289  fhicl::ParameterSet cats_pset{};
290  pset.categories.get_if_present<fhicl::ParameterSet>(cats_pset);
291  // Grab the list of categories, removing the default category
292  // since it is handled specially.
293  auto const default_category_name = "default"s;
294  auto categories = cats_pset.get_pset_names();
295  auto erase_from =
296  remove_if(begin(categories), end(categories), [](auto const& category) {
297  return category == "default"s;
298  });
299  categories.erase(erase_from, categories.cend());
300  // Setup the default configuration for categories--this involves
301  // resetting the limits table according to the user-specified
302  // default configuration.
303  auto const& default_pset =
304  cats_pset.get<fhicl::ParameterSet>("default"s, {});
305  try {
307  defaultLimit_ = (default_params().limit() < 0) ?
308  numeric_limits<decltype(defaultLimit_)>::max() :
309  default_params().limit();
310  defaultReportEvery_ = default_params().reportEvery();
311  defaultTimespan_ = (default_params().timespan() < 0) ?
312  numeric_limits<decltype(defaultTimespan_)>::max() :
313  default_params().timespan();
314  }
315  catch (fhicl::detail::validationException const& e) {
316  string msg{"Category: "s + cet::bold_fontify("default"s) + "\n\n"s};
317  msg += e.what();
318  configuration_errors.push_back(move(msg));
319  }
320  // Now establish this destination's limit/reportEvery/timespan for
321  // each category, using the values of the possibly-specified
322  // default configuration when a given category is missing the
323  // fields.
324  for (auto const& category : categories) {
326  default_pset};
327  try {
328  category_params.validate(cats_pset.get<fhicl::ParameterSet>(category));
329  }
330  catch (fhicl::detail::validationException const& e) {
331  string msg{"Category: " + cet::bold_fontify(category) + "\n\n"};
332  msg += e.what();
333  configuration_errors.push_back(move(msg));
334  }
335 
336  if (category_params().limit() < 0) {
338  } else {
339  categoryParams_[category].limit_ = category_params().limit();
340  }
341  categoryParams_[category].reportEvery_ = category_params().reportEvery();
342  if (category_params().timespan() < 0) {
344  } else {
345  categoryParams_[category].timespan_ = category_params().timespan();
346  }
347  }
348  if (!configuration_errors.empty()) {
349  string msg{"The following categories were misconfigured:\n\n"};
350  for (auto const& error : configuration_errors) {
351  msg += error;
352  }
354  }
355  }
end
while True: pbar.update(maxval-len(onlies[E][S])) #print iS, "/", len(onlies[E][S]) found = False for...
void msg(const char *fmt,...)
Definition: message.cpp:107
error
Definition: include.cc:26
std::map< std::string const, CategoryParams > categoryParams_
std::map< ELextendedID const, StatsCount > statsMap_
const double e
def move(depos, offset)
Definition: depos.py:107
std::string bold_fontify(std::string const &s)
Definition: bold_fontify.h:8
static int max(int a, int b)
ELseverityLevel threshold_
char const * what() const noexcept override
std::optional< T > get_if_present(std::string const &key) const
Definition: ParameterSet.h:224
MsgFormatSettings format_
decltype(auto) constexpr begin(T &&obj)
ADL-aware version of std::begin.
Definition: StdUtils.h:72
std::map< ELextendedID const, XidLimiter > xidLimiters_
static QCString * s
Definition: config.cpp:1042
mf::service::ELdestination::ELdestination ( ELdestination const &  )
delete
mf::service::ELdestination::ELdestination ( ELdestination &&  )
delete

Member Function Documentation

void mf::service::ELdestination::emitToken ( std::ostream &  os,
std::string const &  s,
bool  nl = false,
bool  preambleMode = false 
)
protected

Definition at line 388 of file ELdestination.cc.

392  {
393  string const indent(6, ' ');
394  if (s.empty()) {
395  if (nl) {
396  os << '\n';
397  charsOnLine_ = 0UL;
398  }
399  return;
400  }
401  if (!preambleMode) {
402  os << s;
403  return;
404  }
405  char const first = s[0];
406  char const second = (s.length() < 2) ? '\0' : s[1];
407  char const last = (s.length() < 2) ? '\0' : s[s.length() - 1];
408  char const last2 = (s.length() < 3) ? '\0' : s[s.length() - 2];
409  // checking -2 because the very last char is sometimes a ' '
410  // inserted by ErrorLog::operator<<
411  // Accounts for newline @ the beginning of the string
412  if (first == '\n' || (charsOnLine_ + s.length()) > format_.lineLength) {
413  charsOnLine_ = 0UL;
414  if (second != ' ') {
415  os << ' ';
416  ++charsOnLine_;
417  }
418  if (first == '\n') {
419  os << s.substr(1);
420  } else {
421  os << s;
422  }
423  } else {
424  os << s;
425  }
426  if ((last == '\n') || (last2 == '\n')) {
427  os << indent;
428  if (last != ' ') {
429  os << ' ';
430  }
431  charsOnLine_ = indent.length() + 1UL;
432  }
433  if (nl) {
434  os << '\n';
435  charsOnLine_ = 0UL;
436  } else {
437  charsOnLine_ += s.length();
438  }
439  }
uint length() const
Definition: qcstring.h:195
MsgFormatSettings format_
second_as<> second
Type of time stored in seconds, in double precision.
Definition: spacetime.h:85
std::string nl(std::size_t i=1)
static QCString * s
Definition: config.cpp:1042
void mf::service::ELdestination::fillPrefix ( std::ostringstream &  oss,
mf::ErrorObj const &  msg 
)
protectedvirtual

Reimplemented in mfplugins::ELsyslog.

Definition at line 442 of file ELdestination.cc.

443  {
444  if (msg.is_verbatim()) {
445  return;
446  }
447  auto const& xid = msg.xid();
448  charsOnLine_ = 0UL;
449  emitToken(oss, "%MSG"s, false, true);
450  emitToken(oss, xid.severity().getSymbol(), false, true);
451  emitToken(oss, " ", false, true);
452  emitToken(oss, xid.id(), false, true);
453  emitToken(oss, msg.idOverflow(), false, true);
454  emitToken(oss, ": ", false, true);
455  if (format_.want(SERIAL)) {
456  ostringstream s;
457  s << msg.serial();
458  emitToken(oss, "[serial #" + s.str() + "] ", false, true);
459  }
460  bool needAspace = true;
462  if (xid.module().length() + xid.subroutine().length() > 0) {
463  emitToken(oss, "\n", false, true);
464  needAspace = false;
465  } else if (format_.want(TIMESTAMP) && !format_.want(TIME_SEPARATE)) {
466  emitToken(oss, "\n", false, true);
467  needAspace = false;
468  }
469  }
470  if (format_.want(MODULE) && (xid.module().length() > 0)) {
471  if (needAspace) {
472  emitToken(oss, " ", false, true);
473  needAspace = false;
474  }
475  emitToken(oss, xid.module() + " ", false, true);
476  }
477  if (format_.want(SUBROUTINE) && (xid.subroutine().length() > 0)) {
478  if (needAspace) {
479  emitToken(oss, " ", false, true);
480  needAspace = false;
481  }
482  emitToken(oss, xid.subroutine() + "() ", false, true);
483  }
484  if (format_.want(TIMESTAMP)) {
485  if (format_.want(TIME_SEPARATE)) {
486  emitToken(oss, "\n", false, true);
487  needAspace = false;
488  }
489  if (needAspace) {
490  emitToken(oss, " ", false, true);
491  needAspace = false;
492  }
493  emitToken(oss, format_.timestamp(msg.timestamp()) + " ", false, true);
494  }
495  if (format_.want(SOME_CONTEXT)) {
496  if (needAspace) {
497  emitToken(oss, " ", false, true);
498  needAspace = false;
499  }
500  emitToken(oss, msg.context(), false, true);
501  }
502  }
void msg(const char *fmt,...)
Definition: message.cpp:107
void emitToken(std::ostream &os, std::string const &s, bool nl=false, bool preambleMode=false)
MsgFormatSettings format_
static QCString * s
Definition: config.cpp:1042
void mf::service::ELdestination::fillSuffix ( std::ostringstream &  oss,
mf::ErrorObj const &  msg 
)
protectedvirtual

Reimplemented in mfplugins::ELsyslog.

Definition at line 532 of file ELdestination.cc.

533  {
534  if (!msg.is_verbatim() && !format_.want(NO_LINE_BREAKS)) {
535  emitToken(oss, "\n%MSG");
536  }
537  oss << '\n';
538  }
void msg(const char *fmt,...)
Definition: message.cpp:107
void emitToken(std::ostream &os, std::string const &s, bool nl=false, bool preambleMode=false)
MsgFormatSettings format_
void mf::service::ELdestination::fillUsrMsg ( std::ostringstream &  oss,
mf::ErrorObj const &  msg 
)
protectedvirtual

Reimplemented in mfplugins::ELsyslog.

Definition at line 505 of file ELdestination.cc.

506  {
507  if (!format_.want(TEXT)) {
508  return;
509  }
510  // Determine if file and line should be included
511  if (!msg.is_verbatim()) {
512  if (!msg.filename().empty()) {
513  emitToken(oss, " "s);
514  emitToken(oss, msg.filename());
515  emitToken(oss, ":"s);
516  emitToken(oss, to_string(msg.lineNumber()));
517  }
518  // Check for user-requested line breaks
519  if (format_.want(NO_LINE_BREAKS)) {
520  emitToken(oss, " ==> ");
521  } else {
522  emitToken(oss, "", true);
523  }
524  }
525  // Print the contents.
526  for (auto const& val : msg.items()) {
527  emitToken(oss, val);
528  }
529  }
void msg(const char *fmt,...)
Definition: message.cpp:107
void emitToken(std::ostream &os, std::string const &s, bool nl=false, bool preambleMode=false)
MsgFormatSettings format_
std::string to_string(ModuleType const mt)
Definition: ModuleType.h:34
static QCString * s
Definition: config.cpp:1042
void mf::service::ELdestination::finish ( )
virtual

Definition at line 701 of file ELdestination.cc.

702  {}
void mf::service::ELdestination::flush ( )
protectedvirtual

Definition at line 713 of file ELdestination.cc.

714  {
715  ErrorObj msg{ELwarning, "ELdestination"s};
716  msg << "Call to unimplemented flush()!";
717  log(msg);
718  }
void msg(const char *fmt,...)
Definition: message.cpp:107
virtual void log(mf::ErrorObj &)
ELslProxy< ELwarningGen > constexpr ELwarning
static QCString * s
Definition: config.cpp:1042
string mf::service::ELdestination::formSummary ( )
protected

Definition at line 574 of file ELdestination.cc.

575  {
576  ostringstream s;
577  int n{};
578  // ----- Summary part I:
579  //
580  bool ftnote{false};
581  struct part3 {
582  long n{}, t{};
584  for (auto const& [xid, count] : statsMap_) {
585  auto const& cat = xid.id();
586  // ----- Emit new part I header, if needed:
587  //
588  if (n == 0) {
589  s << "\n";
590  s << " type category sev module subroutine "
591  " count total\n"
592  << " ---- -------------------- -- ---------------- "
593  "---------------- ----- -----\n";
594  }
595  // ----- Emit detailed message information:
596  //
597  s
598  // Type
599  << right << setw(5) << ++n
600  << ' '
601  // Category
602  << left << setw(20) << cat.substr(0, 20)
603  << ' '
604  // Severity
605  << left << setw(2) << xid.severity().getSymbol()
606  << ' '
607  // Module
608  << left << setw(16) << xid.module().substr(0, 16)
609  << ' '
610  // Subroutine
611  << left << setw(16)
612  << xid.subroutine().substr(0, 16)
613  // Count
614  << right << setw(7) << count.n_ << left << setw(1)
615  << (count.ignoredFlag_ ? '*' : ' ')
616  // Total Count
617  << right << setw(8) << count.aggregateN_ << '\n';
618  ftnote = ftnote || count.ignoredFlag_;
619  // ----- Obtain information for Part III, below:
620  //
621  p3[xid.severity().getLevel()].n += count.n_;
622  p3[xid.severity().getLevel()].t += count.aggregateN_;
623  }
624  // ----- Provide footnote to part I, if needed:
625  //
626  if (ftnote) {
627  s << "\n* Some occurrences of this message were suppressed in all "
628  "logs, due to limits.\n";
629  }
630  // ----- Summary part II:
631  //
632  n = 0;
633  for (auto const& pr : statsMap_) {
634  auto const& xid = pr.first;
635  auto const& count = pr.second;
636  string const& cat = xid.id();
637  if (n == 0) {
638  s << '\n'
639  << " type category Examples: run/evt run/evt "
640  "run/evt\n"
641  << " ---- -------------------- ---------------- ---------------- "
642  "----------------\n";
643  }
644  s
645  // Type
646  << right << setw(5) << ++n
647  << ' '
648  // Category
649  << left << setw(20) << cat
650  << ' '
651  // Context1
652  << left << setw(16) << count.context1_.c_str()
653  << ' '
654  // Context2
655  << left << setw(16) << count.context2_.c_str()
656  << ' '
657  // ContextLast
658  << count.contextLast_ << '\n';
659  }
660  // ----- Summary part III:
661  //
662  s << '\n'
663  << "Severity # Occurrences Total Occurrences\n"
664  << "-------- ------------- -----------------\n";
665  for (int k = 0; k < ELseverityLevel::nLevels; ++k) {
666  if (p3[k].n != 0 || p3[k].t != 0) {
667  s
668  // Severity
669  << left << setw(8)
670  << ELseverityLevel{ELseverityLevel::ELsev_(k)}.getName().c_str()
671  // Occurrences
672  << right << setw(17)
673  << p3[k].n
674  // Total Occurrences
675  << right << setw(20) << p3[k].t << '\n';
676  }
677  }
678  return s.str();
679  }
std::map< ELextendedID const, StatsCount > statsMap_
std::void_t< T > n
Q_EXPORT QTSManip setw(int w)
Definition: qtextstream.h:331
static QCString * s
Definition: config.cpp:1042
void mf::service::ELdestination::log ( mf::ErrorObj msg)
virtual

Reimplemented in mf::service::ELstatistics.

Definition at line 545 of file ELdestination.cc.

546  {
547  if (msg.xid().severity() < threshold_) {
548  if (outputStatistics_) {
549  statsMap_[msg.xid()].add(summarizeContext(msg.context()), false);
550  updatedStats_ = true;
551  }
552  return;
553  }
554  if (skipMsg(msg.xid())) {
555  if (outputStatistics_) {
556  statsMap_[msg.xid()].add(summarizeContext(msg.context()), false);
557  updatedStats_ = true;
558  }
559  return;
560  }
561  msg.setReactedTo(true);
562  ostringstream payload;
563  fillPrefix(payload, msg);
564  fillUsrMsg(payload, msg);
565  fillSuffix(payload, msg);
566  routePayload(payload, msg);
567  if (outputStatistics_) {
568  statsMap_[msg.xid()].add(summarizeContext(msg.context()), true);
569  updatedStats_ = true;
570  }
571  }
ELseverityLevel severity() const
Definition: ELextendedID.cc:33
virtual void fillUsrMsg(std::ostringstream &, mf::ErrorObj const &msg)
bool skipMsg(ELextendedID const &)
virtual void fillSuffix(std::ostringstream &, mf::ErrorObj const &msg)
std::string const & context() const
Definition: ErrorObj.cc:98
std::map< ELextendedID const, StatsCount > statsMap_
std::string summarizeContext(std::string const &)
ELextendedID const & xid() const
Definition: ErrorObj.cc:61
ELseverityLevel threshold_
virtual void fillPrefix(std::ostringstream &, mf::ErrorObj const &msg)
virtual void setReactedTo(bool)
Definition: ErrorObj.cc:177
virtual void routePayload(std::ostringstream const &, mf::ErrorObj const &msg)
ELdestination& mf::service::ELdestination::operator= ( ELdestination const &  )
delete
ELdestination& mf::service::ELdestination::operator= ( ELdestination &&  )
delete
void mf::service::ELdestination::resetLimiters ( )
protected

Definition at line 817 of file ELdestination.cc.

818  {
819  xidLimiters_.clear();
820  }
std::map< ELextendedID const, XidLimiter > xidLimiters_
void mf::service::ELdestination::resetMsgCounters ( )
protected

Definition at line 811 of file ELdestination.cc.

812  {
813  statsMap_.clear();
814  }
std::map< ELextendedID const, StatsCount > statsMap_
void mf::service::ELdestination::routePayload ( std::ostringstream const &  ,
mf::ErrorObj const &  msg 
)
protectedvirtual

Reimplemented in mfplugins::ELsyslog, and mf::service::ELostreamOutput.

Definition at line 541 of file ELdestination.cc.

542  {}
void mf::service::ELdestination::setThreshold ( ELseverityLevel  sv)

Definition at line 707 of file ELdestination.cc.

708  {
709  threshold_ = sv;
710  }
ELseverityLevel threshold_
bool mf::service::ELdestination::skipMsg ( ELextendedID const &  xid)
protected

Definition at line 724 of file ELdestination.cc.

725  {
726  auto xl_iter = xidLimiters_.find(xid);
727  if (xl_iter == xidLimiters_.end()) {
728  // Need to create and initialize a limiter for this xid.
729  int limit{defaultLimit_};
730  int reportEvery{defaultReportEvery_};
731  int timespan{defaultTimespan_};
732  // Does the category of this xid have explicit limits?
733  auto cp_iter = categoryParams_.find(xid.id());
734  if (cp_iter != categoryParams_.end()) {
735  // Category limits found, use them.
736  auto const& cp = cp_iter->second;
737  limit = (cp.limit_ < 0) ? defaultLimit_ : cp.limit_;
738  reportEvery =
739  (cp.reportEvery_ < 0) ? defaultReportEvery_ : cp.reportEvery_;
740  timespan = (cp.timespan_ < 0) ? defaultTimespan_ : cp.timespan_;
741  }
742  XidLimiter& limiter = xidLimiters_[xid];
743  limiter.previousTimestamp_ = time(0);
744  limiter.msgCount_ = 0;
745  limiter.skippedMsgCount_ =
746  reportEvery - 1; // So that the FIRST of the prescaled messages emerges
747  limiter.limit_ = limit;
748  limiter.reportEvery_ = reportEvery;
749  limiter.timespan_ = timespan;
750  xl_iter = xidLimiters_.find(xid);
751  }
752  XidLimiter& limiter = xl_iter->second;
753  time_t now = time(0);
754  // Has it been so long that we should restart counting toward the limit?
755  if ((limiter.timespan_ >= 0) &&
756  (difftime(now, limiter.previousTimestamp_) >= limiter.timespan_)) {
757  limiter.msgCount_ = 0;
758  if (limiter.reportEvery_ > 0) {
759  // So this message will be reacted to
760  limiter.skippedMsgCount_ = limiter.reportEvery_ - 1;
761  } else {
762  limiter.skippedMsgCount_ = 0;
763  }
764  }
765  limiter.previousTimestamp_ = now;
766  ++limiter.msgCount_;
767  ++limiter.skippedMsgCount_;
768  if (limiter.skippedMsgCount_ < limiter.reportEvery_) {
769  // Skip message.
770  return true;
771  }
772  if (limiter.limit_ == 0) {
773  // Zero limit - never react to this
774  // Skip message.
775  return true;
776  }
777  if ((limiter.limit_ < 0) || (limiter.msgCount_ <= limiter.limit_)) {
778  limiter.skippedMsgCount_ = 0;
779  // Accept message.
780  return false;
781  }
782  // Now we are over the limit - have we exceeded limit by 2^N * limit?
783  long diff = limiter.msgCount_ - limiter.limit_;
784  long r = diff / limiter.limit_;
785  if (r * limiter.limit_ != diff) {
786  // Not a multiple of limit - don't react
787  // Skip message.
788  return true;
789  }
790  if (r == 1) {
791  // Exactly twice limit - react
792  limiter.skippedMsgCount_ = 0;
793  // Accept message.
794  return false;
795  }
796  while (r > 1) {
797  if ((r & 1) != 0) {
798  // Not 2**msgCount_ times limit - don't react
799  // Skip message.
800  return true;
801  }
802  r >>= 1;
803  }
804  // If you never get an odd number till one, r is 2**msgCount_ so react
805  limiter.skippedMsgCount_ = 0;
806  // Accept message.
807  return false;
808  }
std::map< std::string const, CategoryParams > categoryParams_
std::map< ELextendedID const, XidLimiter > xidLimiters_
string mf::service::ELdestination::summarizeContext ( std::string const &  )
protected

Definition at line 358 of file ELdestination.cc.

359  {
360  if (c.substr(0, 4) != "Run:") {
361  return c;
362  }
363  istringstream is(c);
364  string runWord;
365  int run;
366  is >> runWord >> run;
367  if (!is) {
368  return c;
369  }
370  if (runWord != "Run:") {
371  return c;
372  }
373  string eventWord;
374  int event;
375  is >> eventWord >> event;
376  if (!is) {
377  return c;
378  }
379  if (eventWord != "Event:") {
380  return c;
381  }
382  ostringstream os;
383  os << run << "/" << event;
384  return os.str();
385  }
void mf::service::ELdestination::summary ( )
virtual

Reimplemented in mf::service::ELstatistics.

Definition at line 684 of file ELdestination.cc.

685  {
687  ostringstream payload;
688  payload << "\n=============================================\n\n"
689  << "MessageLogger Summary\n"
690  << formSummary();
691  routePayload(payload, ErrorObj{ELzeroSeverity, "No ostream"s});
692  }
693  updatedStats_ = false;
694  if (reset_) {
696  resetLimiters();
697  }
698  }
ELslProxy< ELzeroSeverityGen > constexpr ELzeroSeverity
static QCString * s
Definition: config.cpp:1042
virtual void routePayload(std::ostringstream const &, mf::ErrorObj const &msg)

Member Data Documentation

std::map<std::string const, CategoryParams> mf::service::ELdestination::categoryParams_
protected

Definition at line 229 of file ELdestination.h.

std::size_t mf::service::ELdestination::charsOnLine_ {}
private

Definition at line 237 of file ELdestination.h.

int mf::service::ELdestination::defaultLimit_
protected

Definition at line 226 of file ELdestination.h.

int mf::service::ELdestination::defaultReportEvery_
protected

Definition at line 227 of file ELdestination.h.

int mf::service::ELdestination::defaultTimespan_
protected

Definition at line 228 of file ELdestination.h.

MsgFormatSettings mf::service::ELdestination::format_
protected

Definition at line 225 of file ELdestination.h.

bool mf::service::ELdestination::outputStatistics_ {false}
protected

Definition at line 232 of file ELdestination.h.

bool mf::service::ELdestination::reset_ {false}
protected

Definition at line 234 of file ELdestination.h.

std::map<ELextendedID const, StatsCount> mf::service::ELdestination::statsMap_
protected

Definition at line 231 of file ELdestination.h.

ELseverityLevel mf::service::ELdestination::threshold_
protected

Definition at line 224 of file ELdestination.h.

bool mf::service::ELdestination::updatedStats_ {false}
protected

Definition at line 233 of file ELdestination.h.

std::map<ELextendedID const, XidLimiter> mf::service::ELdestination::xidLimiters_
protected

Definition at line 230 of file ELdestination.h.


The documentation for this class was generated from the following files: