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 
77 
79 
81 
82 // Possible Traces:
83 // #define ELoutputCONSTRUCTOR_TRACE
84 // #define ELoutputTRACE_LOG
85 // #define ELoutput_EMIT_TRACE
86 
87 #include <iostream>
88 #include <fstream>
89 #include <cstring>
90 #include <cassert>
91 
92 namespace edm {
93 namespace service {
94 
95 // ----------------------------------------------------------------------
96 // Useful function:
97 // ----------------------------------------------------------------------
98 
99 
100 static ELstring formatTime( const time_t t ) { // Change log 7
101 
102  static char const dummy[] = "dd-Mon-yyyy hh:mm:ss TZN "; // Change log 7 for length only
103  char ts[sizeof(dummy)]; // Change log 7
104 
105  struct tm timebuf; // Change log 7
106 
107  strftime( ts, sizeof(dummy), "%d-%b-%Y %H:%M:%S %Z", localtime_r(&t, &timebuf) ); // Change log 7
108  // mf 4-9-04
109 
110 #ifdef STRIP_TRAILING_BLANKS_IN_TIMEZONE
111  // strip trailing blanks that would come when the time zone is not as
112  // long as the maximum allowed - probably not worth the time
113  unsigned int b = strlen(ts);
114  while (ts[--b] == ' ') {ts[b] = 0;}
115 #endif
116 
117  ELstring result(ts); // Change log 7
118  return result; // Change log 7
119 } // formatTime()
120 
121 
122 // ----------------------------------------------------------------------
123 // Constructors:
124 // ----------------------------------------------------------------------
125 
127 : ELdestination ( )
128 , os ( &std::cerr, do_nothing_deleter() )
129 , charsOnLine ( 0 )
130 , xid ( )
131 , wantTimestamp ( true )
132 , wantModule ( true )
133 , wantSubroutine ( true )
134 , wantText ( true )
135 , wantSomeContext ( true )
136 , wantSerial ( false )
137 , wantFullContext ( false )
138 , wantTimeSeparate ( false )
139 , wantEpilogueSeparate( false )
140 , preambleMode ( true ) // 006 9/2/10 mf
141 {
142 
143  #ifdef ELoutputCONSTRUCTOR_TRACE
144  std::cerr << "Constructor for ELoutput()\n";
145  #endif
146 
147  emitToken( "\n=================================================", true );
148  emitToken( "\nMessage Log File written by MessageLogger service \n" );
149  emitToken( "\n=================================================\n", true );
150 
151 } // ELoutput()
152 
153 
154 ELoutput::ELoutput( std::ostream & os_ , bool emitAtStart )
155 : ELdestination ( )
156 , os ( &os_, do_nothing_deleter() )
157 , charsOnLine ( 0 )
158 , xid ( )
159 , wantTimestamp ( true )
160 , wantModule ( true )
161 , wantSubroutine ( true )
162 , wantText ( true )
163 , wantSomeContext ( true )
164 , wantSerial ( false )
165 , wantFullContext ( false )
166 , wantTimeSeparate ( false )
167 , wantEpilogueSeparate( false )
168 , preambleMode ( true ) // 006 9/2/10 mf
169 {
170 
171  #ifdef ELoutputCONSTRUCTOR_TRACE
172  std::cerr << "Constructor for ELoutput( os )\n";
173  #endif
174 
175  // Enh 001 2/13/01 mf
176  if (emitAtStart) {
177  preambleMode = true;
178  emitToken( "\n=================================================", true );
179  emitToken( "\nMessage Log File written by MessageLogger service \n" );
180  emitToken( "\n=================================================\n", true );
181  }
182 
183 } // ELoutput()
184 
185 
186 ELoutput::ELoutput( const ELstring & fileName, bool emitAtStart )
187 : ELdestination ( )
188 , os ( new std::ofstream( fileName.c_str() , std::ios/*_base*/::app), close_and_delete())
189 , charsOnLine ( 0 )
190 , xid ( )
191 , wantTimestamp ( true )
192 , wantModule ( true )
193 , wantSubroutine ( true )
194 , wantText ( true )
195 , wantSomeContext ( true )
196 , wantSerial ( false )
197 , wantFullContext ( false )
198 , wantTimeSeparate ( false )
199 , wantEpilogueSeparate( false )
200 , preambleMode ( true ) // 006 9/2/10 mf
201 {
202 
203  #ifdef ELoutputCONSTRUCTOR_TRACE
204  std::cerr << "Constructor for ELoutput( " << fileName << " )\n";
205  #endif
206 
207  preambleMode = true;
208  if ( os && *os ) {
209  #ifdef ELoutputCONSTRUCTOR_TRACE
210  std::cerr << " Testing if os is owned\n";
211  #endif
212  #ifdef ELoutputCONSTRUCTOR_TRACE
213  std::cerr << " About to do first emit\n";
214  #endif
215  // Enh 001 2/13/01 mf
216  if (emitAtStart) {
217  emitToken( "\n=======================================================",
218  true );
219  emitToken( "\nError Log File " );
220  emitToken( fileName );
221  emitToken( " \n" );
222  }
223  }
224  else {
225  #ifdef ELoutputCONSTRUCTOR_TRACE
226  std::cerr << " Deleting os\n";
227  #endif
228  os.reset(&std::cerr, do_nothing_deleter());
229  #ifdef ELoutputCONSTRUCTOR_TRACE
230  std::cerr << " about to emit to cerr\n";
231  #endif
232  if (emitAtStart) {
233  emitToken( "\n=======================================================",
234  true );
235  emitToken( "\n%MSG** Logging to cerr is being substituted" );
236  emitToken( " for specified log file \"" );
237  emitToken( fileName );
238  emitToken( "\" which could not be opened for write or append.\n" );
239  }
240  }
241  if (emitAtStart) {
242  ELstring const& ftime = formatTime(time(0)); // Change log 7
243  emitToken( ftime, true );
244  emitToken( "\n=======================================================\n",
245  true );
246  }
247  // preambleMode = tprm; removed 9/2/10 mf see change log 6
248 
249  #ifdef ELoutputCONSTRUCTOR_TRACE
250  std::cerr << "Constructor for ELoutput completed.\n";
251  #endif
252 
253 } // ELoutput()
254 
255 
257 : ELdestination ( )
258 , os ( orig.os )
259 , charsOnLine ( orig.charsOnLine )
260 , xid ( orig.xid )
261 , wantTimestamp ( orig.wantTimestamp )
262 , wantModule ( orig.wantModule )
263 , wantSubroutine ( orig.wantSubroutine )
264 , wantText ( orig.wantText )
265 , wantSomeContext ( orig.wantSomeContext )
266 , wantSerial ( orig.wantSerial )
267 , wantFullContext ( orig.wantFullContext )
268 , wantTimeSeparate ( orig.wantTimeSeparate )
269 , wantEpilogueSeparate( orig.wantEpilogueSeparate )
270 , preambleMode ( orig.preambleMode ) // 006 9/2/10 mf
271 {
272 
273  #ifdef ELoutputCONSTRUCTOR_TRACE
274  std::cerr << "Copy constructor for ELoutput\n";
275  #endif
276 
277  // mf 6/15/01 fix of Bug 005
278  threshold = orig.threshold;
280  limits = orig.limits;
281  preamble = orig.preamble;
282  newline = orig.newline;
283  indent = orig.indent;
284  lineLength = orig.lineLength;
285 
289  ignoreThese = orig.ignoreThese;
290 
291 } // ELoutput()
292 
293 
295 
296  #ifdef ELoutputCONSTRUCTOR_TRACE
297  std::cerr << "Destructor for ELoutput\n";
298  #endif
299 
300 } // ~ELoutput()
301 
302 
303 // ----------------------------------------------------------------------
304 // Methods invoked by the ELadministrator:
305 // ----------------------------------------------------------------------
306 
307 ELoutput *
309 
310  return new ELoutput( *this );
311 
312 } // clone()
313 
314 //#define THRESHTRACE
315 //#define ELoutputTRACE_LOG
316 
317 bool ELoutput::log( const edm::ErrorObj & msg ) {
318 
319  #ifdef ELoutputTRACE_LOG
320  std::cerr << " =:=:=: Log to an ELoutput \n";
321  #endif
322 
323  xid = msg.xid(); // Save the xid.
324 
325 #ifdef THRESHTRACE
326  std::cerr << " =:=:=: Log to an ELoutput \n"
327  << " severity = " << xid.severity << "\n"
328  << " threshold = " << threshold << "\n"
329  << " id = " << xid.id << "\n";
330 #endif
331 
332  // See if this message is to be acted upon, and add it to limits table
333  // if it was not already present:
334  //
335  if ( xid.severity < threshold ) return false;
337  && (xid.severity < ELsevere) /* change log 2 */ )
338  return false;
339  if ( ! limits.add( xid )
340  && (xid.severity < ELsevere) /* change log 2 */ )
341  return false;
342 
343  #ifdef ELoutputTRACE_LOG
344  std::cerr << " =:=:=: Limits table work done \n";
345  #endif
346 
347  // Output the prologue:
348  //
349  preambleMode = true;
350 
351  if ( !msg.is_verbatim() ) {
352  charsOnLine = 0; // Change log 5
353  emitToken( preamble );
355  emitToken( " " );
356  emitToken( xid.id );
357  emitToken( msg.idOverflow() );
358  emitToken( ": " );
359  }
360 
361  #ifdef ELoutputTRACE_LOG
362  std::cerr << " =:=:=: Prologue done \n";
363  #endif
364  // Output serial number of message:
365  //
366  if ( !msg.is_verbatim() )
367  {
368  if ( wantSerial ) {
369  std::ostringstream s;
370  s << msg.serial();
371  emitToken( "[serial #" + s.str() + ELstring("] ") );
372  }
373  }
374 
375 #ifdef OUTPUT_FORMATTED_ERROR_MESSAGES
376  // Output each item in the message (before the epilogue):
377  //
378  if ( wantText ) {
379  ELlist_string::const_iterator it;
380  for ( it = msg.items().begin(); it != msg.items().end(); ++it ) {
381  #ifdef ELoutputTRACE_LOG
382  std::cerr << " =:=:=: Item: " << *it << '\n';
383  #endif
384  emitToken( *it );
385  }
386  }
387 #endif
388 
389  // Provide further identification:
390  //
391  bool needAspace = true;
392  if ( !msg.is_verbatim() )
393  {
394  if ( wantEpilogueSeparate ) {
395  if ( xid.module.length() + xid.subroutine.length() > 0 ) {
396  emitToken("\n");
397  needAspace = false;
398  }
399  else if ( wantTimestamp && !wantTimeSeparate ) {
400  emitToken("\n");
401  needAspace = false;
402  }
403  }
404  if ( wantModule && (xid.module.length() > 0) ) {
405  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
406  emitToken( xid.module + ELstring(" ") );
407  }
408  if ( wantSubroutine && (xid.subroutine.length() > 0) ) {
409  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
410  emitToken( xid.subroutine + "()" + ELstring(" ") );
411  }
412  }
413 
414  #ifdef ELoutputTRACE_LOG
415  std::cerr << " =:=:=: Module and Subroutine done \n";
416  #endif
417 
418  // Provide time stamp:
419  //
420  if ( !msg.is_verbatim() )
421  {
422  if ( wantTimestamp ) {
423  if ( wantTimeSeparate ) {
424  emitToken( ELstring("\n") );
425  needAspace = false;
426  }
427  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
428  ELstring const& ftime = formatTime(msg.timestamp()); // Change log 7
429  emitToken( ftime + ELstring(" ") );
430  }
431  }
432 
433  #ifdef ELoutputTRACE_LOG
434  std::cerr << " =:=:=: TimeStamp done \n";
435  #endif
436 
437  // Provide the context information:
438  //
439  if ( !msg.is_verbatim() )
440  {
441  if ( wantSomeContext ) {
442  if (needAspace) { emitToken(ELstring(" ")); needAspace = false; }
443  assert(!needAspace);
444  if ( wantFullContext ) {
445  emitToken( msg.context());
446  #ifdef ELoutputTRACE_LOG
447  std::cerr << " =:=:=: fullContext done: \n";
448  #endif
449  } else {
450  emitToken( msg.context());
451  #ifdef ELoutputTRACE_LOG
452  std::cerr << " =:=:=: Context done: \n";
453  #endif
454  }
455  }
456  }
457 
458  // Provide traceback information:
459  //
460 
461  bool insertNewlineAfterHeader = ( msg.xid().severity != ELdebug );
462  // ELdebug is what LogDebug issues
463 
464  if ( !msg.is_verbatim() )
465  {
466  if ( msg.xid().severity >= traceThreshold ) {
467  emitToken( ELstring("\n")
468  , insertNewlineAfterHeader );
469  }
470  else { //else statement added JV:1
471  emitToken("", insertNewlineAfterHeader);
472  }
473  }
474  #ifdef ELoutputTRACE_LOG
475  std::cerr << " =:=:=: Trace routine done: \n";
476  #endif
477 
478 #ifndef OUTPUT_FORMATTED_ERROR_MESSAGES
479  // Finally, output each item in the message:
480  //
481  preambleMode = false;
482  if ( wantText ) {
483  ELlist_string::const_iterator it;
484  int item_count = 0;
485  for ( it = msg.items().begin(); it != msg.items().end(); ++it ) {
486  #ifdef ELoutputTRACE_LOG
487  std::cerr << " =:=:=: Item: " << *it << '\n';
488  #endif
489  ++item_count;
490  if ( !msg.is_verbatim() ) {
491  if ( !insertNewlineAfterHeader && (item_count == 3) ) {
492  // in a LogDebug message, the first 3 items are FILE, :, and LINE
493  emitToken( *it, true );
494  } else {
495  emitToken( *it );
496  }
497  } else {
498  emitToken( *it );
499  }
500  }
501  }
502 #endif
503 
504  // And after the message, add a %MSG on its own line
505  // Change log 4 6/11/07 mf
506 
507  if ( !msg.is_verbatim() )
508  {
509  emitToken("\n%MSG");
510  }
511 
512 
513  // Done; message has been fully processed; separate, flush, and leave
514  //
515 
516  (*os) << newline;
517  flush();
518 
519 
520  #ifdef ELoutputTRACE_LOG
521  std::cerr << " =:=:=: log(msg) done: \n";
522  #endif
523 
524  return true;
525 
526 } // log()
527 
528 
529 // Remainder are from base class.
530 
531 // ----------------------------------------------------------------------
532 // Output methods:
533 // ----------------------------------------------------------------------
534 
535 void ELoutput::emitToken( const ELstring & s, bool nl ) {
536 
537  #ifdef ELoutput_EMIT_TRACE
538  std::cerr << "[][][] in emit: charsOnLine is " << charsOnLine << '\n';
539  std::cerr << "[][][] in emit: s.length() " << s.length() << '\n';
540  std::cerr << "[][][] in emit: lineLength is " << lineLength << '\n';
541  #endif
542 
543  if (s.length() == 0) {
544  if ( nl ) {
545  (*os) << newline << std::flush;
546  charsOnLine = 0;
547  }
548  return;
549  }
550 
551  char first = s[0];
552  char second,
553  last,
554  last2;
555  second = (s.length() < 2) ? '\0' : s[1];
556  last = (s.length() < 2) ? '\0' : s[s.length()-1];
557  last2 = (s.length() < 3) ? '\0' : s[s.length()-2];
558  //checking -2 because the very last char is sometimes a ' ' inserted
559  //by ErrorLog::operator<<
560 
561  if (preambleMode) {
562  //Accounts for newline @ the beginning of the ELstring JV:2
563  if ( first == '\n'
564  || (charsOnLine + static_cast<int>(s.length())) > lineLength ) {
565  #ifdef ELoutput_EMIT_TRACE
566  std::cerr << "[][][] in emit: about to << to *os \n";
567  #endif
568  #ifdef HEADERS_BROKEN_INTO_LINES_AND_INDENTED
569  // Change log 3: Removed this code 6/11/07 mf
570  (*os) << newline << indent;
571  charsOnLine = indent.length();
572  #else
573  charsOnLine = 0; // Change log 5
574  #endif
575  if (second != ' ') {
576  (*os) << ' ';
577  charsOnLine++;
578  }
579  if ( first == '\n' ) {
580  (*os) << s.substr(1);
581  }
582  else {
583  (*os) << s;
584  }
585  }
586  #ifdef ELoutput_EMIT_TRACE
587  std::cerr << "[][][] in emit: about to << s to *os: " << s << " \n";
588  #endif
589  else {
590  (*os) << s;
591  }
592 
593  if (last == '\n' || last2 == '\n') { //accounts for newline @ end $$ JV:2
594  (*os) << indent; //of the ELstring
595  if (last != ' ')
596  (*os) << ' ';
597  charsOnLine = indent.length() + 1;
598  }
599 
600  if ( nl ) { (*os) << newline << std::flush; charsOnLine = 0; }
601  else { charsOnLine += s.length(); }
602 }
603 
604  if (!preambleMode) {
605  (*os) << s;
606  }
607 
608  #ifdef ELoutput_EMIT_TRACE
609  std::cerr << "[][][] in emit: completed \n";
610  #endif
611 
612 } // emitToken()
613 
614 
615 // ----------------------------------------------------------------------
616 // Methods controlling message formatting:
617 // ----------------------------------------------------------------------
618 
621 
624 
627 
628 void ELoutput::includeText() { wantText = true; }
629 void ELoutput::suppressText() { wantText = false; }
630 
633 
636 
639 
642 
645 
646 
647 // ----------------------------------------------------------------------
648 // Summary output:
649 // ----------------------------------------------------------------------
650 
652  const ELstring & fullTitle
653 , const ELstring & sumLines
654 ) {
655  const int titleMaxLength( 40 );
656 
657  // title:
658  //
659  ELstring title( fullTitle, 0, titleMaxLength );
660  int q = (lineLength - title.length() - 2) / 2;
661  ELstring line(q, '=');
662  emitToken( "", true );
663  emitToken( line );
664  emitToken( " " );
665  emitToken( title );
666  emitToken( " " );
667  emitToken( line, true );
668 
669  // body:
670  //
671  *os << sumLines;
672 
673  // finish:
674  //
675  emitToken( "", true );
676  emitToken( ELstring(lineLength, '='), true );
677 
678 } // summarization()
679 
680 
681 // ----------------------------------------------------------------------
682 // Changing ostream:
683 // ----------------------------------------------------------------------
684 
685 void ELoutput::changeFile (std::ostream & os_) {
686  os.reset(&os_, do_nothing_deleter());
687  emitToken( "\n=======================================================", true );
688  emitToken( "\nError Log changed to this stream\n" );
689  ELstring const& ftime = formatTime(time(0)); // Change log 7
690  emitToken( ftime, true );
691  emitToken( "\n=======================================================\n", true );
692 }
693 
695  os.reset(new std::ofstream( filename.c_str(), std::ios/*_base*/::app), close_and_delete());
696  emitToken( "\n=======================================================", true );
697  emitToken( "\nError Log changed to this file\n" );
698  ELstring const& ftime = formatTime(time(0)); // Change log 7
699  emitToken( ftime, true );
700  emitToken( "\n=======================================================\n", true );
701 }
702 
704  os->flush();
705 }
706 
707 
708 // ----------------------------------------------------------------------
709 
710 
711 } // end of namespace service
712 } // end of namespace edm
virtual ELoutput * clone() const
Definition: ELoutput.cc:308
ELslProxy< ELdebugGen > const ELdebug
ELseverityLevel traceThreshold
virtual void useFullContext()
Definition: ELoutput.cc:637
ELseverityLevel severity
Definition: ELextendedID.h:35
const ELstring & idOverflow() const
Definition: ErrorObj.cc:148
virtual void separateTime()
Definition: ELoutput.cc:640
virtual void changeFile(std::ostream &os)
Definition: ELoutput.cc:685
time_t timestamp() const
Definition: ErrorObj.cc:149
assert(m_qm.get())
virtual bool thisShouldBeIgnored(const ELstring &s) const
virtual void suppressSubroutine()
Definition: ELoutput.cc:626
virtual void suppressContext()
Definition: ELoutput.cc:632
edm::ELextendedID xid
Definition: ELoutput.h:115
virtual void includeSerial()
Definition: ELoutput.cc:635
virtual void suppressTime()
Definition: ELoutput.cc:620
U second(std::pair< T, U > const &p)
const ELstring getSymbol() const
virtual void attachEpilogue()
Definition: ELoutput.cc:644
static ELstring formatTime(const time_t t)
Definition: ELoutput.cc:100
const ELextendedID & xid() const
Definition: ErrorObj.cc:147
bool add(const ELextendedID &xid)
tuple result
Definition: query.py:137
virtual void includeSubroutine()
Definition: ELoutput.cc:625
virtual void useContext()
Definition: ELoutput.cc:638
virtual bool log(const edm::ErrorObj &msg)
Definition: ELoutput.cc:317
virtual void includeContext()
Definition: ELoutput.cc:631
virtual void suppressSerial()
Definition: ELoutput.cc:634
virtual void includeTime()
Definition: ELoutput.cc:619
int serial() const
Definition: ErrorObj.cc:146
virtual void separateEpilogue()
Definition: ELoutput.cc:643
ELstring subroutine
Definition: ELextendedID.h:37
std::shared_ptr< std::ostream > os
Definition: ELoutput.h:113
virtual void attachTime()
Definition: ELoutput.cc:641
const ELlist_string & items() const
Definition: ErrorObj.cc:150
ELslProxy< ELsevereGen > const ELsevere
virtual void emitToken(const ELstring &s, bool nl=false)
Definition: ELoutput.cc:535
virtual void summarization(const ELstring &fullTitle, const ELstring &sumLines)
Definition: ELoutput.cc:651
double b
Definition: hdecay.h:120
virtual void suppressModule()
Definition: ELoutput.cc:623
virtual void flush()
Definition: ELoutput.cc:703
virtual void suppressText()
Definition: ELoutput.cc:629
tuple filename
Definition: lut2db_cfg.py:20
virtual void includeText()
Definition: ELoutput.cc:628
volatile std::atomic< bool > shutdown_flag false
T first(std::pair< T, U > const &p)
bool is_verbatim() const
Definition: ErrorObj.cc:152
virtual void includeModule()
Definition: ELoutput.cc:622
std::string ELstring
Definition: ELstring.h:26
ELstring context() const
Definition: ErrorObj.cc:154