CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ELoutput.cc
Go to the documentation of this file.
1 // ----------------------------------------------------------------------
2 //
3 // ELoutput.cc
4 //
5 //
6 // 7/8/98 mf Created
7 // 6/10/99 jv JV:1 puts a \n after each log using suppressContext()
8 // 6/11/99 jv JV:2 accounts for newline at the beginning and end of
9 // an emitted ELstring
10 // 6/14/99 mf Made the static char* in formatTime into auto so that
11 // ctime(&t) is called each time - corrects the bug of
12 // never changing the first timestamp.
13 // 6/15/99 mf Inserted operator<<(void (*f)(ErrorLog&) to avoid
14 // mystery characters being inserted when users <<
15 // endmsg to an ErrorObj.
16 // 7/2/99 jv Added separate/attachTime, Epilogue, and Serial options
17 // 8/2/99 jv Modified handling of newline in an emmitted ELstring
18 // 2/22/00 mf Changed usage of myDestX to myOutputX. Added
19 // constructor of ELoutput from ELoutputX * to allow for
20 // inheritance.
21 // 6/7/00 web Reflect consolidation of ELdestination/X; consolidate
22 // ELoutput/X; add filterModule() and query logic
23 // 10/4/00 mf excludeModule()
24 // 1/15/01 mf line length control: changed ELoutputLineLen to
25 // the base class lineLen (no longer static const)
26 // 2/13/01 mf Added emitAtStart argument to two constructors
27 // { Enh 001 }.
28 // 4/4/01 mf Simplify filter/exclude logic by useing base class
29 // method thisShouldBeIgnored(). Eliminate
30 // moduleOfinterest and moduleToexclude.
31 // 6/15/01 mf Repaired Bug 005 by explicitly setting all
32 // ELdestination member data appropriately.
33 //10/18/01 mf When epilogue not on separate line, preceed by space
34 // 6/23/03 mf changeFile(), flush()
35 // 4/09/04 mf Add 1 to length in strftime call in formatTime, to
36 // correctly provide the time zone. Had been providing
37 // CST every time.
38 //
39 // 12/xx/06 mf Tailoring to CMS MessageLogger
40 // 1/11/06 mf Eliminate time stamp from starting message
41 // 3/20/06 mf Major formatting change to do no formatting
42 // except the header and line separation.
43 // 4/04/06 mf Move the line feed between header and text
44 // till after the first 3 items (FILE:LINE) for
45 // debug messages.
46 // 6/06/06 mf Verbatim
47 // 6/12/06 mf Set preambleMode true when printing the header
48 //
49 // Change Log
50 //
51 // 1 10/18/06 mf In format_time(): Initialized ts[] with 5 extra
52 // spaces, to cover cases where time zone is more than
53 // 3 characters long
54 //
55 // 2 10/30/06 mf In log(): if severity indicated is SEVERE, do not
56 // impose limits. This is to implement the LogSystem
57 // feature: Those messages are never to be ignored.
58 //
59 // 3 6/11/07 mf In emitToken(): In preamble mode, do not break and indent
60 // even if exceeding nominal line length.
61 //
62 // 4 6/11/07 mf In log(): After the message, add a %MSG on its own line
63 //
64 // 5 3/27/09 mf Properly treat charsOnLine, which had been fouled due to
65 // change 3. In log() and emitToken().
66 //
67 // 6 9/2/10 mf Initialize preambleMode in each ctor, and remove the
68 // unnecessary use of tprm which was preserving a moot
69 // initial value.
70 //
71 // 7 9/30/10 wmtan make formatTime() thread safe by not using statics.
72 //
73 // ----------------------------------------------------------------------
74 
75 
79 
81 
83 
84 // Possible Traces:
85 // #define ELoutputCONSTRUCTOR_TRACE
86 // #define ELoutputTRACE_LOG
87 // #define ELoutput_EMIT_TRACE
88 
89 #include <iostream>
90 #include <fstream>
91 #include <cstring>
92 
93 namespace edm {
94 namespace service {
95 
96 // ----------------------------------------------------------------------
97 // Useful function:
98 // ----------------------------------------------------------------------
99 
100 
101 static ELstring formatTime( const time_t t ) { // Change log 7
102 
103  static char const dummy[] = "dd-Mon-yyyy hh:mm:ss TZN "; // Change log 7 for length only
104  char ts[sizeof(dummy)]; // Change log 7
105 
106  struct tm timebuf; // Change log 7
107 
108  strftime( ts, sizeof(dummy), "%d-%b-%Y %H:%M:%S %Z", localtime_r(&t, &timebuf) ); // Change log 7
109  // mf 4-9-04
110 
111 #ifdef STRIP_TRAILING_BLANKS_IN_TIMEZONE
112  // strip trailing blanks that would come when the time zone is not as
113  // long as the maximum allowed - probably not worth the time
114  unsigned int b = strlen(ts);
115  while (ts[--b] == ' ') {ts[b] = 0;}
116 #endif
117 
118  ELstring result(ts); // Change log 7
119  return result; // Change log 7
120 } // formatTime()
121 
122 
123 // ----------------------------------------------------------------------
124 // Constructors:
125 // ----------------------------------------------------------------------
126 
128 : ELdestination ( )
129 , os ( &std::cerr, do_nothing_deleter() )
130 , charsOnLine ( 0 )
131 , xid ( )
132 , wantTimestamp ( true )
133 , wantModule ( true )
134 , wantSubroutine ( true )
135 , wantText ( true )
136 , wantSomeContext ( true )
137 , wantSerial ( false )
138 , wantFullContext ( false )
139 , wantTimeSeparate ( false )
140 , wantEpilogueSeparate( false )
141 , preambleMode ( true ) // 006 9/2/10 mf
142 {
143 
144  #ifdef ELoutputCONSTRUCTOR_TRACE
145  std::cerr << "Constructor for ELoutput()\n";
146  #endif
147 
148  emitToken( "\n=================================================", true );
149  emitToken( "\nMessage Log File written by MessageLogger service \n" );
150  emitToken( "\n=================================================\n", true );
151 
152 } // ELoutput()
153 
154 
155 ELoutput::ELoutput( std::ostream & os_ , bool emitAtStart )
156 : ELdestination ( )
157 , os ( &os_, do_nothing_deleter() )
158 , charsOnLine ( 0 )
159 , xid ( )
160 , wantTimestamp ( true )
161 , wantModule ( true )
162 , wantSubroutine ( true )
163 , wantText ( true )
164 , wantSomeContext ( true )
165 , wantSerial ( false )
166 , wantFullContext ( false )
167 , wantTimeSeparate ( false )
168 , wantEpilogueSeparate( false )
169 , preambleMode ( true ) // 006 9/2/10 mf
170 {
171 
172  #ifdef ELoutputCONSTRUCTOR_TRACE
173  std::cerr << "Constructor for ELoutput( os )\n";
174  #endif
175 
176  // Enh 001 2/13/01 mf
177  if (emitAtStart) {
178  preambleMode = true;
179  emitToken( "\n=================================================", true );
180  emitToken( "\nMessage Log File written by MessageLogger service \n" );
181  emitToken( "\n=================================================\n", true );
182  }
183 
184 } // ELoutput()
185 
186 
187 ELoutput::ELoutput( const ELstring & fileName, bool emitAtStart )
188 : ELdestination ( )
189 , os ( new std::ofstream( fileName.c_str() , std::ios/*_base*/::app), close_and_delete())
190 , charsOnLine ( 0 )
191 , xid ( )
192 , wantTimestamp ( true )
193 , wantModule ( true )
194 , wantSubroutine ( true )
195 , wantText ( true )
196 , wantSomeContext ( true )
197 , wantSerial ( false )
198 , wantFullContext ( false )
199 , wantTimeSeparate ( false )
200 , wantEpilogueSeparate( false )
201 , preambleMode ( true ) // 006 9/2/10 mf
202 {
203 
204  #ifdef ELoutputCONSTRUCTOR_TRACE
205  std::cerr << "Constructor for ELoutput( " << fileName << " )\n";
206  #endif
207 
208  preambleMode = true;
209  if ( os && *os ) {
210  #ifdef ELoutputCONSTRUCTOR_TRACE
211  std::cerr << " Testing if os is owned\n";
212  #endif
213  #ifdef ELoutputCONSTRUCTOR_TRACE
214  std::cerr << " About to do first emit\n";
215  #endif
216  // Enh 001 2/13/01 mf
217  if (emitAtStart) {
218  emitToken( "\n=======================================================",
219  true );
220  emitToken( "\nError Log File " );
221  emitToken( fileName );
222  emitToken( " \n" );
223  }
224  }
225  else {
226  #ifdef ELoutputCONSTRUCTOR_TRACE
227  std::cerr << " Deleting os\n";
228  #endif
229  os.reset(&std::cerr, do_nothing_deleter());
230  #ifdef ELoutputCONSTRUCTOR_TRACE
231  std::cerr << " about to emit to cerr\n";
232  #endif
233  if (emitAtStart) {
234  emitToken( "\n=======================================================",
235  true );
236  emitToken( "\n%MSG** Logging to cerr is being substituted" );
237  emitToken( " for specified log file \"" );
238  emitToken( fileName );
239  emitToken( "\" which could not be opened for write or append.\n" );
240  }
241  }
242  if (emitAtStart) {
243  ELstring const& ftime = formatTime(time(0)); // Change log 7
244  emitToken( ftime, true );
245  emitToken( "\n=======================================================\n",
246  true );
247  }
248  // preambleMode = tprm; removed 9/2/10 mf see change log 6
249 
250  #ifdef ELoutputCONSTRUCTOR_TRACE
251  std::cerr << "Constructor for ELoutput completed.\n";
252  #endif
253 
254 } // ELoutput()
255 
256 
258 : ELdestination ( )
259 , os ( orig.os )
260 , charsOnLine ( orig.charsOnLine )
261 , xid ( orig.xid )
262 , wantTimestamp ( orig.wantTimestamp )
263 , wantModule ( orig.wantModule )
264 , wantSubroutine ( orig.wantSubroutine )
265 , wantText ( orig.wantText )
266 , wantSomeContext ( orig.wantSomeContext )
267 , wantSerial ( orig.wantSerial )
268 , wantFullContext ( orig.wantFullContext )
269 , wantTimeSeparate ( orig.wantTimeSeparate )
270 , wantEpilogueSeparate( orig.wantEpilogueSeparate )
271 , preambleMode ( orig.preambleMode ) // 006 9/2/10 mf
272 {
273 
274  #ifdef ELoutputCONSTRUCTOR_TRACE
275  std::cerr << "Copy constructor for ELoutput\n";
276  #endif
277 
278  // mf 6/15/01 fix of Bug 005
279  threshold = orig.threshold;
281  limits = orig.limits;
282  preamble = orig.preamble;
283  newline = orig.newline;
284  indent = orig.indent;
285  lineLength = orig.lineLength;
286 
290  ignoreThese = orig.ignoreThese;
291 
292 } // ELoutput()
293 
294 
296 
297  #ifdef ELoutputCONSTRUCTOR_TRACE
298  std::cerr << "Destructor for ELoutput\n";
299  #endif
300 
301 } // ~ELoutput()
302 
303 
304 // ----------------------------------------------------------------------
305 // Methods invoked by the ELadministrator:
306 // ----------------------------------------------------------------------
307 
308 ELoutput *
310 
311  return new ELoutput( *this );
312 
313 } // clone()
314 
315 //#define THRESHTRACE
316 //#define ELoutputTRACE_LOG
317 
318 bool ELoutput::log( const edm::ErrorObj & msg ) {
319 
320  #ifdef ELoutputTRACE_LOG
321  std::cerr << " =:=:=: Log to an ELoutput \n";
322  #endif
323 
324  xid = msg.xid(); // Save the xid.
325 
326 #ifdef THRESHTRACE
327  std::cerr << " =:=:=: Log to an ELoutput \n"
328  << " severity = " << xid.severity << "\n"
329  << " threshold = " << threshold << "\n"
330  << " id = " << xid.id << "\n";
331 #endif
332 
333  // See if this message is to be acted upon, and add it to limits table
334  // if it was not already present:
335  //
336  if ( xid.severity < threshold ) return false;
338  && (xid.severity < ELsevere) /* change log 2 */ )
339  return false;
340  if ( ! limits.add( xid )
341  && (xid.severity < ELsevere) /* change log 2 */ )
342  return false;
343 
344  #ifdef ELoutputTRACE_LOG
345  std::cerr << " =:=:=: Limits table work done \n";
346  #endif
347 
348  // Output the prologue:
349  //
350  preambleMode = true;
351 
352  if ( !msg.is_verbatim() ) {
353  charsOnLine = 0; // Change log 5
354  emitToken( preamble );
356  emitToken( " " );
357  emitToken( xid.id );
358  emitToken( msg.idOverflow() );
359  emitToken( ": " );
360  }
361 
362  #ifdef ELoutputTRACE_LOG
363  std::cerr << " =:=:=: Prologue done \n";
364  #endif
365  // Output serial number of message:
366  //
367  if ( !msg.is_verbatim() )
368  {
369  if ( wantSerial ) {
370  std::ostringstream s;
371  s << msg.serial();
372  emitToken( "[serial #" + s.str() + ELstring("] ") );
373  }
374  }
375 
376 #ifdef OUTPUT_FORMATTED_ERROR_MESSAGES
377  // Output each item in the message (before the epilogue):
378  //
379  if ( wantText ) {
380  ELlist_string::const_iterator it;
381  for ( it = msg.items().begin(); it != msg.items().end(); ++it ) {
382  #ifdef ELoutputTRACE_LOG
383  std::cerr << " =:=:=: Item: " << *it << '\n';
384  #endif
385  emitToken( *it );
386  }
387  }
388 #endif
389 
390  // Provide further identification:
391  //
392  bool needAspace = true;
393  if ( !msg.is_verbatim() )
394  {
395  if ( wantEpilogueSeparate ) {
396  if ( xid.module.length() + xid.subroutine.length() > 0 ) {
397  emitToken("\n");
398  needAspace = false;
399  }
400  else if ( wantTimestamp && !wantTimeSeparate ) {
401  emitToken("\n");
402  needAspace = false;
403  }
404  }
405  if ( wantModule && (xid.module.length() > 0) ) {
406  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
407  emitToken( xid.module + ELstring(" ") );
408  }
409  if ( wantSubroutine && (xid.subroutine.length() > 0) ) {
410  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
411  emitToken( xid.subroutine + "()" + ELstring(" ") );
412  }
413  }
414 
415  #ifdef ELoutputTRACE_LOG
416  std::cerr << " =:=:=: Module and Subroutine done \n";
417  #endif
418 
419  // Provide time stamp:
420  //
421  if ( !msg.is_verbatim() )
422  {
423  if ( wantTimestamp ) {
424  if ( wantTimeSeparate ) {
425  emitToken( ELstring("\n") );
426  needAspace = false;
427  }
428  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
429  ELstring const& ftime = formatTime(msg.timestamp()); // Change log 7
430  emitToken( ftime + ELstring(" ") );
431  }
432  }
433 
434  #ifdef ELoutputTRACE_LOG
435  std::cerr << " =:=:=: TimeStamp done \n";
436  #endif
437 
438  // Provide the context information:
439  //
440  if ( !msg.is_verbatim() )
441  {
442  if ( wantSomeContext ) {
443  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
444  #ifdef ELoutputTRACE_LOG
445  std::cerr << " =:=:=:>> context supplier is at 0x"
446  << std::hex
448  std::cerr << " =:=:=:>> context is --- "
450  << '\n';
451  #endif
452  if ( wantFullContext ) {
453  emitToken( ELadministrator::instance()->getContextSupplier().fullContext());
454  #ifdef ELoutputTRACE_LOG
455  std::cerr << " =:=:=: fullContext done: \n";
456  #endif
457  } else {
458  emitToken( ELadministrator::instance()->getContextSupplier().context());
459  #ifdef ELoutputTRACE_LOG
460  std::cerr << " =:=:=: Context done: \n";
461  #endif
462  }
463  }
464  }
465 
466  // Provide traceback information:
467  //
468 
469  bool insertNewlineAfterHeader = ( msg.xid().severity != ELsuccess );
470  // ELsuccess is what LogDebug issues
471 
472  if ( !msg.is_verbatim() )
473  {
474  if ( msg.xid().severity >= traceThreshold ) {
475  emitToken( ELstring("\n")
476  + ELadministrator::instance()->getContextSupplier().traceRoutine()
477  , insertNewlineAfterHeader );
478  }
479  else { //else statement added JV:1
480  emitToken("", insertNewlineAfterHeader);
481  }
482  }
483  #ifdef ELoutputTRACE_LOG
484  std::cerr << " =:=:=: Trace routine done: \n";
485  #endif
486 
487 #ifndef OUTPUT_FORMATTED_ERROR_MESSAGES
488  // Finally, output each item in the message:
489  //
490  preambleMode = false;
491  if ( wantText ) {
492  ELlist_string::const_iterator it;
493  int item_count = 0;
494  for ( it = msg.items().begin(); it != msg.items().end(); ++it ) {
495  #ifdef ELoutputTRACE_LOG
496  std::cerr << " =:=:=: Item: " << *it << '\n';
497  #endif
498  ++item_count;
499  if ( !msg.is_verbatim() ) {
500  if ( !insertNewlineAfterHeader && (item_count == 3) ) {
501  // in a LogDebug message, the first 3 items are FILE, :, and LINE
502  emitToken( *it, true );
503  } else {
504  emitToken( *it );
505  }
506  } else {
507  emitToken( *it );
508  }
509  }
510  }
511 #endif
512 
513  // And after the message, add a %MSG on its own line
514  // Change log 4 6/11/07 mf
515 
516  if ( !msg.is_verbatim() )
517  {
518  emitToken("\n%MSG");
519  }
520 
521 
522  // Done; message has been fully processed; separate, flush, and leave
523  //
524 
525  (*os) << newline;
526  flush();
527 
528 
529  #ifdef ELoutputTRACE_LOG
530  std::cerr << " =:=:=: log(msg) done: \n";
531  #endif
532 
533  return true;
534 
535 } // log()
536 
537 
538 // Remainder are from base class.
539 
540 // ----------------------------------------------------------------------
541 // Output methods:
542 // ----------------------------------------------------------------------
543 
544 void ELoutput::emitToken( const ELstring & s, bool nl ) {
545 
546  #ifdef ELoutput_EMIT_TRACE
547  std::cerr << "[][][] in emit: charsOnLine is " << charsOnLine << '\n';
548  std::cerr << "[][][] in emit: s.length() " << s.length() << '\n';
549  std::cerr << "[][][] in emit: lineLength is " << lineLength << '\n';
550  #endif
551 
552  if (s.length() == 0) {
553  if ( nl ) {
554  (*os) << newline << std::flush;
555  charsOnLine = 0;
556  }
557  return;
558  }
559 
560  char first = s[0];
561  char second,
562  last,
563  last2;
564  second = (s.length() < 2) ? '\0' : s[1];
565  last = (s.length() < 2) ? '\0' : s[s.length()-1];
566  last2 = (s.length() < 3) ? '\0' : s[s.length()-2];
567  //checking -2 because the very last char is sometimes a ' ' inserted
568  //by ErrorLog::operator<<
569 
570  if (preambleMode) {
571  //Accounts for newline @ the beginning of the ELstring JV:2
572  if ( first == '\n'
573  || (charsOnLine + static_cast<int>(s.length())) > lineLength ) {
574  #ifdef ELoutput_EMIT_TRACE
575  std::cerr << "[][][] in emit: about to << to *os \n";
576  #endif
577  #ifdef HEADERS_BROKEN_INTO_LINES_AND_INDENTED
578  // Change log 3: Removed this code 6/11/07 mf
579  (*os) << newline << indent;
580  charsOnLine = indent.length();
581  #else
582  charsOnLine = 0; // Change log 5
583  #endif
584  if (second != ' ') {
585  (*os) << ' ';
586  charsOnLine++;
587  }
588  if ( first == '\n' ) {
589  (*os) << s.substr(1);
590  }
591  else {
592  (*os) << s;
593  }
594  }
595  #ifdef ELoutput_EMIT_TRACE
596  std::cerr << "[][][] in emit: about to << s to *os: " << s << " \n";
597  #endif
598  else {
599  (*os) << s;
600  }
601 
602  if (last == '\n' || last2 == '\n') { //accounts for newline @ end $$ JV:2
603  (*os) << indent; //of the ELstring
604  if (last != ' ')
605  (*os) << ' ';
606  charsOnLine = indent.length() + 1;
607  }
608 
609  if ( nl ) { (*os) << newline << std::flush; charsOnLine = 0; }
610  else { charsOnLine += s.length(); }
611 }
612 
613  if (!preambleMode) {
614  (*os) << s;
615  }
616 
617  #ifdef ELoutput_EMIT_TRACE
618  std::cerr << "[][][] in emit: completed \n";
619  #endif
620 
621 } // emitToken()
622 
623 
624 // ----------------------------------------------------------------------
625 // Methods controlling message formatting:
626 // ----------------------------------------------------------------------
627 
630 
633 
636 
637 void ELoutput::includeText() { wantText = true; }
638 void ELoutput::suppressText() { wantText = false; }
639 
642 
645 
648 
651 
654 
655 
656 // ----------------------------------------------------------------------
657 // Summary output:
658 // ----------------------------------------------------------------------
659 
661  const ELstring & fullTitle
662 , const ELstring & sumLines
663 ) {
664  const int titleMaxLength( 40 );
665 
666  // title:
667  //
668  ELstring title( fullTitle, 0, titleMaxLength );
669  int q = (lineLength - title.length() - 2) / 2;
670  ELstring line(q, '=');
671  emitToken( "", true );
672  emitToken( line );
673  emitToken( " " );
674  emitToken( title );
675  emitToken( " " );
676  emitToken( line, true );
677 
678  // body:
679  //
680  *os << sumLines;
681 
682  // finish:
683  //
684  emitToken( "", true );
685  emitToken( ELstring(lineLength, '='), true );
686 
687 } // summarization()
688 
689 
690 // ----------------------------------------------------------------------
691 // Changing ostream:
692 // ----------------------------------------------------------------------
693 
694 void ELoutput::changeFile (std::ostream & os_) {
695  os.reset(&os_, do_nothing_deleter());
696  emitToken( "\n=======================================================", true );
697  emitToken( "\nError Log changed to this stream\n" );
698  ELstring const& ftime = formatTime(time(0)); // Change log 7
699  emitToken( ftime, true );
700  emitToken( "\n=======================================================\n", true );
701 }
702 
704  os.reset(new std::ofstream( filename.c_str(), std::ios/*_base*/::app), close_and_delete());
705  emitToken( "\n=======================================================", true );
706  emitToken( "\nError Log changed to this file\n" );
707  ELstring const& ftime = formatTime(time(0)); // Change log 7
708  emitToken( ftime, true );
709  emitToken( "\n=======================================================\n", true );
710 }
711 
713  os->flush();
714 }
715 
716 
717 // ----------------------------------------------------------------------
718 
719 
720 } // end of namespace service
721 } // end of namespace edm
virtual ELoutput * clone() const
Definition: ELoutput.cc:309
ELseverityLevel traceThreshold
const ELcontextSupplier & getContextSupplier() const
virtual void useFullContext()
Definition: ELoutput.cc:646
ELseverityLevel severity
Definition: ELextendedID.h:36
const ELstring & idOverflow() const
Definition: ErrorObj.cc:147
virtual void separateTime()
Definition: ELoutput.cc:649
virtual void changeFile(std::ostream &os)
Definition: ELoutput.cc:694
ELslProxy< ELsuccessGen > const ELsuccess
time_t timestamp() const
Definition: ErrorObj.cc:148
virtual bool thisShouldBeIgnored(const ELstring &s) const
virtual void suppressSubroutine()
Definition: ELoutput.cc:635
virtual void suppressContext()
Definition: ELoutput.cc:641
edm::ELextendedID xid
Definition: ELoutput.h:115
virtual void includeSerial()
Definition: ELoutput.cc:644
boost::shared_ptr< std::ostream > os
Definition: ELoutput.h:113
virtual void suppressTime()
Definition: ELoutput.cc:629
U second(std::pair< T, U > const &p)
const ELstring getSymbol() const
virtual void attachEpilogue()
Definition: ELoutput.cc:653
static ELstring formatTime(const time_t t)
Definition: ELoutput.cc:101
const ELextendedID & xid() const
Definition: ErrorObj.cc:146
bool add(const ELextendedID &xid)
tuple result
Definition: query.py:137
virtual void includeSubroutine()
Definition: ELoutput.cc:634
virtual void useContext()
Definition: ELoutput.cc:647
virtual bool log(const edm::ErrorObj &msg)
Definition: ELoutput.cc:318
virtual void includeContext()
Definition: ELoutput.cc:640
virtual void suppressSerial()
Definition: ELoutput.cc:643
virtual void includeTime()
Definition: ELoutput.cc:628
int serial() const
Definition: ErrorObj.cc:145
virtual void separateEpilogue()
Definition: ELoutput.cc:652
virtual ELstring context() const =0
ELstring subroutine
Definition: ELextendedID.h:38
virtual void attachTime()
Definition: ELoutput.cc:650
const ELlist_string & items() const
Definition: ErrorObj.cc:149
ELslProxy< ELsevereGen > const ELsevere
virtual void emitToken(const ELstring &s, bool nl=false)
Definition: ELoutput.cc:544
static ELadministrator * instance()
virtual void summarization(const ELstring &fullTitle, const ELstring &sumLines)
Definition: ELoutput.cc:660
double b
Definition: hdecay.h:120
virtual void suppressModule()
Definition: ELoutput.cc:632
virtual void flush()
Definition: ELoutput.cc:712
virtual void suppressText()
Definition: ELoutput.cc:638
tuple filename
Definition: lut2db_cfg.py:20
virtual void includeText()
Definition: ELoutput.cc:637
T first(std::pair< T, U > const &p)
bool is_verbatim() const
Definition: ErrorObj.cc:151
virtual void includeModule()
Definition: ELoutput.cc:631
std::string ELstring
Definition: ELstring.h:26