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