CMS 3D CMS Logo

MessageLogger.h
Go to the documentation of this file.
1 #ifndef MessageLogger_MessageLogger_h
2 #define MessageLogger_MessageLogger_h
3 
4 // -*- C++ -*-
5 //
6 // Package: MessageLogger
7 // Class : <none>
8 // Functions: LogSystem, LogError, LogWarning, LogInfo, LogDebug
9 // LogAbsolute, LogProblem, LogPrint, LogVerbatim, LogTrace
10 // LogImportant
11 //
12 
13 //
14 // Original Author: W. Brown and M. Fischler
15 // Created: Fri Nov 11 16:38:19 CST 2005
16 // Major Split: Tue Feb 14 11:00:00 CST 2006
17 // See MessageService/interface/MessageLogger.h
18 //
19 // =================================================
20 // Change log
21 //
22 // 1 mf 5/11/06 Added a space before the file/line string in LogDebug_
23 // to avoid the run-together with the run and event number
24 //
25 // 2 mf 6/6/06 Added LogVerbatim and LogTrace
26 //
27 // 3 mf 10/30/06 Added LogSystem and LogPrint
28 //
29 // 4 mf 6/1/07 Added LogAbsolute and LogProblem
30 //
31 // 5 mf 7/24/07 Added HaltMessageLogging
32 //
33 // 6 mf 8/7/07 Added FlushMessageLog
34 //
35 // 7 mf 8/7/07 Added GroupLogStatistics(category)
36 //
37 // 8 mf 12/12/07 Reworked LogDebug macro, LogDebug_class,, and similarly
38 // for LogTrace, to avoid the need for the static dummy
39 // objects. This cures the use-of-thread-commands-after-
40 // exit problem in programs that link but do not use the
41 // MessageLogger.
42 //
43 // 9 mf 12/12/07 Check for subtly terrible situation of copying and then
44 // writing to a LogDebug_ object. Also forbid copying any
45 // of the ordinary LogXXX objects (since that implies either
46 // copying a MessageSender, or having a stale copy available
47 // to lose message contents).
48 //
49 // 10 mf 12/14/07 Moved the static free function onlyLowestDirectory
50 // to a class member function of LogDebug_, changing
51 // name to a more descriptive stripLeadingDirectoryTree.
52 // Cures the 2600-copies-of-this-function complaint.
53 //
54 // 11 mf 6/24/08 Added LogImportant which is LogProblem. For output
55 // which "obviously" ought to emerge, but allowing specific
56 // suppression as if it were at the LogError level, rather
57 // than the non-suppressible LogAbsolute.
58 //
59 // 12 ge 9/12/08 MessageLogger now works even when compiled with -DNDEBUG.
60 // The problem was that Suppress_LogDebug_ was missing the operator<<
61 // needed for streaming `std::iomanip`s.
62 //
63 // 13 wmtan 11/18/08 Use explicit non-inlined destructors
64 //
65 // 14 mf 3/23/09 ap.valid() used whenever possible suppression, to avoid
66 // null pointer usage
67 //
68 // 15 mf 8/11/09 provision for control of standalone threshold and ignores
69 //
70 // 16 mf 10/2/09 Correct mission in logVerbatim and others of check for
71 // whether this severity is enabled
72 //
73 // 17 wmtan 10/29/09 Out of line LogDebug_ and LogTrace_ constructors.
74 //
75 // 18 wmtan 07/08/10 Remove unnecessary includes
76 //
77 // 19 mf 09/21/10 !!! BEHAVIOR CHANGE: LogDebug suppression.
78 // The sole preprocessor symbol controlling suppression of
79 // LogDebug is EDM_ML_DEBUG. If EDM_ML_DEBUG is not defined
80 // then LogDebug is suppressed. Thus by default LogDebug is
81 // suppressed.
82 //
83 // 20 mf 09/21/10 The mechanism of LogDebug is modified such that if LogDebug
84 // is suppressed, whether via lack of the EDM_ML_DEBUG symbol
85 // or dynabically via !debgEnabled, all code past the
86 // LogDebug(...), including operator<< and functions to
87 // prepare the output strings, is squelched. This was the
88 // original intended behavior.
89 //
90 // ************ Note that in this regard, LogDebug behaves like assert:
91 // The use of functions having side effects, on a LogDebug
92 // statement (just as within an assert()), is unwise as it
93 // makes turning on the debugging aid alter the program
94 // behavior.
95 //
96 // 21 mf 9/23/10 Support for situations where no thresholds are low
97 // enough to react to LogDebug (or info, or warning).
98 // A key observation is that while debugEnabled
99 // should in principle be obtained via an instance() of
100 // MessageDrop, debugAlwaysSuppressed is universal across
101 // threads and hence is properly just a class static, which
102 // is much quicker to check.
103 //
104 // 22 mf 9/27/10 edmmltest::LogWarningThatSuppressesLikeLogInfo,
105 // a class provided solely to allow testing of the feature
106 // that if all destinations have threshold too high, then
107 // a level of messages (in this case, INFO) will be suppressed
108 // without even being seen by the destinations.
109 //
110 // 23 mf 11/30/10 SnapshotMessageLog() method to force MessageDrop to
111 // capture any pointed-to strings in anticipation of key
112 // objects going away before a message is going to be issued.
113 //
114 // 24 fwyzard 7/6/11 Add support for discarding LogError-level messages
115 // on a per-module basis (needed at HLT)
116 //
117 // 25 wmtan 7/17/11 Allocate MessageSender on stack rather than heap
118 //
119 // 26 wmtan 7/22/11 Fix clang compilation errors for LogDebug and LogTrace
120 // by making MessageSender copyable, and holding
121 // the ErrorObj in a shared pointer with a custom deleter.
122 //
123 // 27 mkortela 2/27/17 Add IfLogTrace and IfLogDebug
124 // =================================================
125 
126 // system include files
127 
128 #include <memory>
129 #include <string>
130 
131 // user include files
132 
133 // forward declarations
134 
137 #include "FWCore/Utilities/interface/EDMException.h" // Change log 8
138 
139 namespace edm {
140 
141  class LogWarning {
142  public:
143  explicit LogWarning(std::string const& id)
144  : ap(ELwarning,
145  id,
146  false,
147  (MessageDrop::warningAlwaysSuppressed || !MessageDrop::instance()->warningEnabled)) // Change log 21
148  {}
149  ~LogWarning(); // Change log 13
150 
151  template <class T>
153  if (ap.valid())
154  ap << t;
155  return *this;
156  }
157  LogWarning& operator<<(std::ostream& (*f)(std::ostream&)) {
158  if (ap.valid())
159  ap << f;
160  return *this;
161  }
162  LogWarning& operator<<(std::ios_base& (*f)(std::ios_base&)) {
163  if (ap.valid())
164  ap << f;
165  return *this;
166  }
167 
168  template <typename F>
169  LogWarning& log(F&& iF) {
170  if (ap.valid()) {
171  iF(ap);
172  }
173  return *this;
174  }
175 
176  private:
178  LogWarning(LogWarning const&) = delete; // Change log 9
179  LogWarning& operator=(LogWarning const&) = delete;
180 
181  }; // LogWarning
182 
183  class LogError {
184  public:
185  explicit LogError(std::string const& id)
186  : ap(ELerror, id, false, !MessageDrop::instance()->errorEnabled) // Change log 24
187  {}
188  ~LogError(); // Change log 13
189 
190  template <class T>
191  LogError& operator<<(T const& t) {
192  if (ap.valid())
193  ap << t;
194  return *this;
195  }
196  LogError& operator<<(std::ostream& (*f)(std::ostream&)) {
197  if (ap.valid())
198  ap << f;
199  return *this;
200  }
201  LogError& operator<<(std::ios_base& (*f)(std::ios_base&)) {
202  if (ap.valid())
203  ap << f;
204  return *this;
205  }
206 
207  template <typename F>
208  LogError& log(F&& iF) {
209  if (ap.valid()) {
210  iF(ap);
211  }
212  return *this;
213  }
214 
215  private:
217  LogError(LogError const&) = delete; // Change log 9
218  LogError& operator=(LogError const&) = delete;
219 
220  }; // LogError
221 
222  class LogSystem {
223  public:
224  explicit LogSystem(std::string const& id) : ap(ELsevere, id) {}
225  ~LogSystem(); // Change log 13
226 
227  template <class T>
228  LogSystem& operator<<(T const& t) {
229  ap << t;
230  return *this;
231  }
232  LogSystem& operator<<(std::ostream& (*f)(std::ostream&)) {
233  ap << f;
234  return *this;
235  }
236  LogSystem& operator<<(std::ios_base& (*f)(std::ios_base&)) {
237  ap << f;
238  return *this;
239  }
240 
241  template <typename F>
242  LogSystem& log(F&& iF) {
243  iF(ap);
244  return *this;
245  }
246 
247  private:
249  LogSystem(LogSystem const&) = delete; // Change log 9
250  LogSystem& operator=(LogSystem const&) = delete;
251 
252  }; // LogSystem
253 
254  class LogInfo {
255  public:
256  explicit LogInfo(std::string const& id)
257  : ap(ELinfo,
258  id,
259  false,
260  (MessageDrop::infoAlwaysSuppressed || !MessageDrop::instance()->infoEnabled)) // Change log 21
261  {}
262  ~LogInfo(); // Change log 13
263 
264  template <class T>
265  LogInfo& operator<<(T const& t) {
266  if (ap.valid())
267  ap << t;
268  return *this;
269  }
270  LogInfo& operator<<(std::ostream& (*f)(std::ostream&)) {
271  if (ap.valid())
272  ap << f;
273  return *this;
274  }
275  LogInfo& operator<<(std::ios_base& (*f)(std::ios_base&)) {
276  if (ap.valid())
277  ap << f;
278  return *this;
279  }
280 
281  template <typename F>
282  LogInfo& log(F&& iF) {
283  if (ap.valid()) {
284  iF(ap);
285  }
286  return *this;
287  }
288 
289  private:
291  LogInfo(LogInfo const&) = delete; // Change log 9
292  LogInfo& operator=(LogInfo const&) = delete;
293 
294  }; // LogInfo
295 
296  // verbatim version of LogInfo
297  class LogVerbatim // change log 2
298  {
299  public:
300  explicit LogVerbatim(std::string const& id)
301  : ap(ELinfo,
302  id,
303  true,
304  (MessageDrop::infoAlwaysSuppressed || !MessageDrop::instance()->infoEnabled)) // Change log 21
305  {}
306  ~LogVerbatim(); // Change log 13
307 
308  template <class T>
310  if (ap.valid())
311  ap << t;
312  return *this;
313  }
314  // Change log 14
315  LogVerbatim& operator<<(std::ostream& (*f)(std::ostream&)) {
316  if (ap.valid())
317  ap << f;
318  return *this;
319  }
320  LogVerbatim& operator<<(std::ios_base& (*f)(std::ios_base&)) {
321  if (ap.valid())
322  ap << f;
323  return *this;
324  }
325 
326  template <typename F>
327  LogVerbatim& log(F&& iF) {
328  if (ap.valid()) {
329  iF(ap);
330  }
331  return *this;
332  }
333 
334  private:
336  LogVerbatim(LogVerbatim const&) = delete; // Change log 9
337  LogVerbatim& operator=(LogVerbatim const&) = delete;
338 
339  }; // LogVerbatim
340 
341  // verbatim version of LogWarning
342  class LogPrint // change log 3
343  {
344  public:
345  explicit LogPrint(std::string const& id)
346  : ap(ELwarning,
347  id,
348  true,
349  (MessageDrop::warningAlwaysSuppressed || !MessageDrop::instance()->warningEnabled)) // Change log 21
350  {}
351  ~LogPrint(); // Change log 13
352 
353  template <class T>
354  LogPrint& operator<<(T const& t) {
355  if (ap.valid())
356  ap << t;
357  return *this;
358  }
359  // Change log 14
360  LogPrint& operator<<(std::ostream& (*f)(std::ostream&)) {
361  if (ap.valid())
362  ap << f;
363  return *this;
364  }
365  LogPrint& operator<<(std::ios_base& (*f)(std::ios_base&)) {
366  if (ap.valid())
367  ap << f;
368  return *this;
369  }
370 
371  template <typename F>
372  LogPrint& log(F&& iF) {
373  if (ap.valid()) {
374  iF(ap);
375  }
376  return *this;
377  }
378 
379  private:
381  LogPrint(LogPrint const&) = delete; // Change log 9
382  LogPrint& operator=(LogPrint const&) = delete;
383 
384  }; // LogPrint
385 
386  // verbatim version of LogError
387  class LogProblem // change log 4
388  {
389  public:
390  explicit LogProblem(std::string const& id)
391  : ap(ELerror, id, true, !MessageDrop::instance()->errorEnabled) // Change log 24
392  {}
393  ~LogProblem(); // Change log 13
394 
395  template <class T>
397  if (ap.valid())
398  ap << t;
399  return *this;
400  }
401  LogProblem& operator<<(std::ostream& (*f)(std::ostream&)) {
402  if (ap.valid())
403  ap << f;
404  return *this;
405  }
406  LogProblem& operator<<(std::ios_base& (*f)(std::ios_base&)) {
407  if (ap.valid())
408  ap << f;
409  return *this;
410  }
411 
412  template <typename F>
413  LogProblem& log(F&& iF) {
414  if (ap.valid()) {
415  iF(ap);
416  }
417  return *this;
418  }
419 
420  private:
422  LogProblem(LogProblem const&) = delete; // Change log 9
423  LogProblem& operator=(LogProblem const&) = delete;
424 
425  }; // LogProblem
426 
427  // less judgemental verbatim version of LogError
428  class LogImportant // change log 11
429  {
430  public:
431  explicit LogImportant(std::string const& id)
432  : ap(ELerror, id, true, !MessageDrop::instance()->errorEnabled) // Change log 24
433  {}
434  ~LogImportant(); // Change log 13
435 
436  template <class T>
438  if (ap.valid())
439  ap << t;
440  return *this;
441  }
442  LogImportant& operator<<(std::ostream& (*f)(std::ostream&)) {
443  if (ap.valid())
444  ap << f;
445  return *this;
446  }
447  LogImportant& operator<<(std::ios_base& (*f)(std::ios_base&)) {
448  if (ap.valid())
449  ap << f;
450  return *this;
451  }
452 
453  template <typename F>
454  LogImportant& log(F&& iF) {
455  if (ap.valid()) {
456  iF(ap);
457  }
458  return *this;
459  }
460 
461  private:
463  LogImportant(LogImportant const&) = delete; // Change log 9
464  LogImportant& operator=(LogImportant const&) = delete;
465 
466  }; // LogImportant
467 
468  // verbatim version of LogSystem
469  class LogAbsolute // change log 4
470  {
471  public:
472  explicit LogAbsolute(std::string const& id)
473  : ap(ELsevere, id, true) // true for verbatim
474  {}
475  ~LogAbsolute(); // Change log 13
476 
477  template <class T>
479  ap << t;
480  return *this;
481  }
482  LogAbsolute& operator<<(std::ostream& (*f)(std::ostream&)) {
483  ap << f;
484  return *this;
485  }
486  LogAbsolute& operator<<(std::ios_base& (*f)(std::ios_base&)) {
487  ap << f;
488  return *this;
489  }
490 
491  template <typename F>
492  LogAbsolute& log(F&& iF) {
493  iF(ap);
494  return *this;
495  }
496 
497  private:
499  LogAbsolute(LogAbsolute const&) = delete; // Change log 9
500  LogAbsolute& operator=(LogAbsolute const&) = delete;
501 
502  }; // LogAbsolute
503 
505 
506  // change log 10: removed onlyLowestDirectory()
507 
508  void LogStatistics();
509 
510  class LogDebug_ {
511  public:
512  LogDebug_() : ap() {}
513  explicit LogDebug_(std::string const& id, std::string const& file, int line); // Change log 17
514  ~LogDebug_();
515 
516  template <class T>
517  LogDebug_& operator<<(T const& t) {
518  if (ap.valid())
519  ap << t;
520  return *this;
521  }
522  LogDebug_& operator<<(std::ostream& (*f)(std::ostream&)) {
523  if (ap.valid())
524  ap << f;
525  return *this;
526  }
527  LogDebug_& operator<<(std::ios_base& (*f)(std::ios_base&)) {
528  if (ap.valid())
529  ap << f;
530  return *this;
531  }
532  // Change log 8: The tests for ap.valid() being null
533 
534  template <typename F>
535  LogDebug_& log(F&& iF) {
536  if (ap.valid()) {
537  iF(ap);
538  }
539  return *this;
540  }
541 
542  private:
545  // change log 10
546  }; // LogDebug_
547 
548  class LogTrace_ {
549  public:
550  LogTrace_() : ap() {}
551  explicit LogTrace_(std::string const& id); // Change log 13
552  ~LogTrace_();
553 
554  template <class T>
555  LogTrace_& operator<<(T const& t) {
556  if (ap.valid())
557  ap << t;
558  return *this;
559  }
560  LogTrace_& operator<<(std::ostream& (*f)(std::ostream&)) {
561  if (ap.valid())
562  ap << f;
563  return *this;
564  }
565  LogTrace_& operator<<(std::ios_base& (*f)(std::ios_base&)) {
566  if (ap.valid())
567  ap << f;
568  return *this;
569  }
570  // Change log 8: The tests for ap.valid() being null
571 
572  template <typename F>
573  LogTrace_& log(F&& iF) {
574  if (ap.valid()) {
575  iF(ap);
576  }
577  return *this;
578  }
579 
580  private:
582 
583  }; // LogTrace_
584 
585  // Change log 22
586  namespace edmmltest {
588  public:
590  : ap(ELwarning,
591  id,
592  false,
593  (MessageDrop::infoAlwaysSuppressed || !MessageDrop::instance()->warningEnabled)) // Change log 22
594  {}
596  template <class T>
598  if (ap.valid())
599  ap << t;
600  return *this;
601  }
602  LogWarningThatSuppressesLikeLogInfo& operator<<(std::ostream& (*f)(std::ostream&)) {
603  if (ap.valid())
604  ap << f;
605  return *this;
606  }
607  LogWarningThatSuppressesLikeLogInfo& operator<<(std::ios_base& (*f)(std::ios_base&)) {
608  if (ap.valid())
609  ap << f;
610  return *this;
611  }
612 
613  template <typename F>
615  if (ap.valid()) {
616  iF(ap);
617  }
618  return *this;
619  }
620 
621  private:
625 
626  }; // LogWarningThatSuppressesLikeLogInfo
627  } // end namespace edmmltest
628 
630  // With any decent optimization, use of Suppress_LogDebug_ (...)
631  // including streaming of items to it via operator<<
632  // will produce absolutely no executable code.
633  public:
634  template <class T>
636  return *this;
637  } // Change log 12
638  Suppress_LogDebug_& operator<<(std::ostream& (*)(std::ostream&)) { return *this; } // Change log 12
639  Suppress_LogDebug_& operator<<(std::ios_base& (*)(std::ios_base&)) { return *this; } // Change log 12
640 
641  template <typename F>
643  return *this;
644  }
645  }; // Suppress_LogDebug_
646 
647  bool isDebugEnabled();
648  bool isInfoEnabled();
649  bool isWarningEnabled();
650  void HaltMessageLogging();
651  void FlushMessageLog();
652  void clearMessageLog();
655 
656  // Change Log 15
657  // The following two methods have no effect except in stand-alone apps
658  // that do not create a MessageServicePresence:
660  void squelchStandAloneMessageCategory(std::string const& category);
661 
662 } // namespace edm
663 
664 // change log 19 and change log 20
665 // The preprocessor symbol controlling suppression of LogDebug is EDM_ML_DEBUG. Thus by default (BEHAVIOR CHANGE) LogDebug is
666 // If LogDebug is suppressed, all code past the LogDebug(...) is squelched.
667 // See doc/suppression.txt.
668 
669 #ifndef EDM_ML_DEBUG
670 #define LogDebug(id) true ? edm::Suppress_LogDebug_() : edm::Suppress_LogDebug_()
671 #define LogTrace(id) true ? edm::Suppress_LogDebug_() : edm::Suppress_LogDebug_()
672 #else
673 // change log 21
674 #define LogDebug(id) \
675  (edm::MessageDrop::debugAlwaysSuppressed || !edm::MessageDrop::instance()->debugEnabled) \
676  ? edm::LogDebug_() \
677  : edm::LogDebug_(id, __FILE__, __LINE__)
678 #define LogTrace(id) \
679  (edm::MessageDrop::debugAlwaysSuppressed || !edm::MessageDrop::instance()->debugEnabled) ? edm::LogTrace_() \
680  : edm::LogTrace_(id)
681 #endif
682 
683 // change log 27
684 //
685 // These macros reduce the need to pollute the code with #ifdefs. The
686 // idea is that the condition is checked only if debugging is enabled.
687 // That way the condition expression may use variables that are
688 // declared only if EDM_ML_DEBUG is enabled. If it is disabled, rely
689 // on the fact that LogDebug/LogTrace should compile to no-op.
690 #ifdef EDM_ML_DEBUG
691 #define IfLogDebug(cond, cat) \
692  if (cond) \
693  LogDebug(cat)
694 #define IfLogTrace(cond, cat) \
695  if (cond) \
696  LogTrace(cat)
697 #else
698 #define IfLogDebug(cond, cat) LogDebug(cat)
699 #define IfLogTrace(cond, cat) LogTrace(cat)
700 #endif
701 
702 #endif // MessageLogger_MessageLogger_h
MessageSender ap
bool isDebugEnabled()
LogAbsolute & operator<<(std::ios_base &(*f)(std::ios_base &))
bool isWarningEnabled()
LogVerbatim(std::string const &id)
LogImportant & operator<<(std::ostream &(*f)(std::ostream &))
MessageSender ap
LogAbsolute & operator<<(std::ostream &(*f)(std::ostream &))
void FlushMessageLog()
LogPrint & operator<<(std::ostream &(*f)(std::ostream &))
LogInfo(std::string const &id)
static PFTauRenderPlugin instance
MessageSender ap
void HaltMessageLogging()
LogDebug_ & operator<<(T const &t)
LogWarning & operator=(LogWarning const &)=delete
MessageSender ap
LogAbsolute(std::string const &id)
MessageSender ap
MessageSender ap
LogVerbatim & operator<<(T const &t)
bool isMessageProcessingSetUp()
LogWarningThatSuppressesLikeLogInfo & log(F &&iF)
LogImportant & log(F &&iF)
LogWarning & operator<<(T const &t)
LogWarning(std::string const &id)
ELslProxy< ELwarningGen > const ELwarning
LogProblem(std::string const &id)
LogInfo & operator<<(std::ios_base &(*f)(std::ios_base &))
LogTrace_ & operator<<(std::ostream &(*f)(std::ostream &))
void setStandAloneMessageThreshold(edm::ELseverityLevel const &severity)
LogVerbatim & operator<<(std::ostream &(*f)(std::ostream &))
LogInfo & operator<<(T const &t)
LogAbsolute & operator<<(T const &t)
LogWarning & operator<<(std::ios_base &(*f)(std::ios_base &))
MessageSender ap
LogWarning & log(F &&iF)
void GroupLogStatistics(std::string const &category)
ELslProxy< ELerrorGen > const ELerror
LogError(std::string const &id)
LogSystem & operator<<(T const &t)
LogSystem & operator<<(std::ostream &(*f)(std::ostream &))
LogPrint & operator<<(T const &t)
LogVerbatim & operator<<(std::ios_base &(*f)(std::ios_base &))
LogTrace_ & operator<<(T const &t)
LogVerbatim & log(F &&iF)
LogError & log(F &&iF)
LogWarningThatSuppressesLikeLogInfo & operator<<(std::ostream &(*f)(std::ostream &))
LogDebug_ & operator<<(std::ios_base &(*f)(std::ios_base &))
double f[11][100]
MessageSender ap
void squelchStandAloneMessageCategory(std::string const &category)
LogProblem & operator<<(T const &t)
LogDebug_ & log(F &&iF)
MessageSender ap
Suppress_LogDebug_ & operator<<(std::ostream &(*)(std::ostream &))
LogProblem & operator<<(std::ostream &(*f)(std::ostream &))
LogPrint(std::string const &id)
LogPrint & log(F &&iF)
LogInfo & operator<<(std::ostream &(*f)(std::ostream &))
LogSystem & operator<<(std::ios_base &(*f)(std::ios_base &))
LogError & operator<<(T const &t)
ELslProxy< ELinfoGen > const ELinfo
void LogStatistics()
LogTrace_ & log(F &&iF)
ELslProxy< ELsevereGen > const ELsevere
void clearMessageLog()
MessageSender ap
LogSystem(std::string const &id)
MessageSender ap
LogWarningThatSuppressesLikeLogInfo & operator<<(std::ios_base &(*f)(std::ios_base &))
Suppress_LogDebug_ & log(F &&iF)
LogWarning & operator<<(std::ostream &(*f)(std::ostream &))
LogDebug_ & operator<<(std::ostream &(*f)(std::ostream &))
LogInfo & log(F &&iF)
LogImportant(std::string const &id)
LogImportant & operator<<(T const &t)
bool isInfoEnabled()
LogError & operator<<(std::ostream &(*f)(std::ostream &))
HLT enums.
LogTrace_ & operator<<(std::ios_base &(*f)(std::ios_base &))
std::string stripLeadingDirectoryTree(const std::string &file)
LogImportant & operator<<(std::ios_base &(*f)(std::ios_base &))
LogAbsolute & log(F &&iF)
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
LogSystem & log(F &&iF)
long double T
LogWarningThatSuppressesLikeLogInfo & operator<<(T const &t)
LogProblem & log(F &&iF)
LogPrint & operator<<(std::ios_base &(*f)(std::ios_base &))
Suppress_LogDebug_ & operator<<(T const &)
LogProblem & operator<<(std::ios_base &(*f)(std::ios_base &))
LogError & operator<<(std::ios_base &(*f)(std::ios_base &))
Suppress_LogDebug_ & operator<<(std::ios_base &(*)(std::ios_base &))