Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "FWCore/MessageService/interface/ELcollected.h"
00018 #include "FWCore/MessageService/interface/ELdestination.h"
00019 #include "FWCore/MessageService/interface/ELadministrator.h"
00020 #include "FWCore/MessageService/interface/ELcontextSupplier.h"
00021
00022 #include <sstream>
00023
00024
00025
00026
00027
00028
00029 namespace edm {
00030 namespace service {
00031
00032
00033
00034
00035
00036
00037 ELcollected::ELcollected( const ELsender & snd )
00038 : ELoutput()
00039 , sender ( snd.clone() )
00040 {
00041
00042 #ifdef ELcollectedCONSTRUCTOR_TRACE
00043 std::cout << "Constructor for ELcollected(ELsender)\n";
00044 #endif
00045
00046
00047
00048 }
00049
00050
00051 ELcollected::ELcollected( const ELcollected & orig )
00052 : ELoutput( orig )
00053 , sender ( orig.sender->clone() )
00054 {
00055
00056 #ifdef ELcollectedCONSTRUCTOR_TRACE
00057 std::cout << "Copy constructor for ELcollected\n";
00058 #endif
00059
00060 ignoreMostModules = orig.ignoreMostModules;
00061 respondToThese = orig.respondToThese;
00062 respondToMostModules = orig.respondToMostModules;
00063 ignoreThese = orig.ignoreThese;
00064
00065 }
00066
00067
00068 ELcollected::~ELcollected() {
00069
00070 #ifdef ELcollectedCONSTRUCTOR_TRACE
00071 std::cout << "Destructor for ELcollected)\n";
00072 #endif
00073 }
00074
00075
00076
00077
00078
00079
00080
00081 ELcollected *
00082 ELcollected::clone() const {
00083
00084 return new ELcollected( *this );
00085
00086 }
00087
00088
00089
00090
00091
00092
00093
00094
00095 void ELcollected::intoBuf( const ELstring & s ) {
00096
00097 buf += s;
00098 buf += '\0';
00099
00100 }
00101
00102
00103
00104
00105
00106
00107 void ELcollected::emitXid( const ELextendedID & xid ) {
00108
00109 buf = "";
00110
00111 intoBuf ( xid.process );
00112 intoBuf ( xid.module );
00113 intoBuf ( xid.subroutine );
00114 intoBuf ( xid.id );
00115 std::ostringstream ost;
00116 ost << xid.severity.getLevel();
00117 intoBuf ( ost.str() );
00118
00119 }
00120
00121
00122
00123
00124
00125
00126 void ELcollected::emitToken( const ELstring & s, bool nl ) {
00127
00128 #ifdef ELcollected_EMIT_TRACE
00129 std::cout << "[][][] in emit: s.length() " << s.length() << "\n";
00130 #endif
00131
00132
00133
00134
00135 if (s.length() == 0) {
00136 if ( nl ) {
00137 intoBuf( newline );
00138 charsOnLine = 0;
00139 }
00140 return;
00141 }
00142
00143
00144
00145
00146 #ifdef ELcollected_EMIT_TRACE
00147 std::cout << "[][][] in emit: about to << s to buf: " << s << " \n";
00148 #endif
00149
00150
00151
00152 intoBuf (s);
00153
00154
00155
00156
00157
00158
00159 if ( nl ) {
00160 intoBuf (newline);
00161 }
00162
00163 #ifdef ELcollected_EMIT_TRACE
00164 std::cout << "[][][] in emit: completed \n";
00165 #endif
00166
00167 }
00168
00169
00170
00171
00172
00173
00174
00175 bool ELcollected::log( const edm::ErrorObj & msg ) {
00176
00177 #ifdef ELcollectedTRACE_LOG
00178 std::cout << " =:=:=: Log to an ELcollected \n";
00179 #endif
00180
00181 xid = msg.xid();
00182
00183
00184
00185
00186 if ( msg.xid().severity < threshold ) return false;
00187 if ( thisShouldBeIgnored(xid.module) ) return false;
00188 if ( ! limits.add( msg.xid() ) ) return false;
00189
00190 #ifdef ELcollectedTRACE_LOG
00191 std::cout << " =:=:=: Limits table work done \n";
00192 #endif
00193
00194
00195
00196 emitXid (xid);
00197
00198
00199
00200 #ifdef ELcollectedTRACE_LOG
00201 std::cout << " =:=:=: xid emitted \n";
00202 #endif
00203
00204
00205
00206
00207
00208 emitToken( ELadministrator::instance()->
00209 getContextSupplier().summaryContext());
00210 emitToken( ELadministrator::instance()->
00211 getContextSupplier().context());
00212 emitToken( ELadministrator::instance()->
00213 getContextSupplier().fullContext());
00214
00215 #ifdef ELcollectedTRACE_LOG
00216 std::cout << " =:=:=: Context done: \n";
00217 #endif
00218
00219
00220
00221
00222
00223
00224
00225 if ( wantText ) {
00226 ELlist_string::const_iterator it;
00227 for ( it = msg.items().begin(); it != msg.items().end(); ++it ) {
00228 #ifdef ELcollectedTRACE_LOG
00229 std::cout << " =:=:=: Item: " << *it <<"\n";
00230 #endif
00231 emitToken( *it );
00232 }
00233 }
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243 if ( msg.xid().severity >= traceThreshold ) {
00244 emitToken( ELstring("\n")
00245 + ELadministrator::instance()->getContextSupplier().traceRoutine()
00246 , true );
00247 }
00248 else {
00249 emitToken( "", true );
00250 }
00251 #ifdef ELcollectedTRACE_LOG
00252 std::cout << " =:=:=: Trace routine done: \n";
00253 #endif
00254
00255
00256
00257
00258
00259 buf += char(0);
00260 int nbuf = buf.length();
00261
00262 sender->send ( nbuf, buf.data() );
00263
00264 #ifdef ELcollectedTRACE_LOG
00265 std::cout << " =:=:=: log(msg) done: \n";
00266 #endif
00267
00268 return true;
00269
00270 }
00271
00272
00273
00274
00275
00276 }
00277 }
00278