Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] Annotation of /trunk/gadget/errorhandler.cc
[mareframe] / trunk / gadget / errorhandler.cc Repository:
ViewVC logotype

Annotation of /trunk/gadget/errorhandler.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (view) (download)

1 : agomez 1 #include "errorhandler.h"
2 :     #include "gadget.h"
3 :     #include "global.h"
4 :     #ifndef GADGET_NETWORK
5 :     //JMB dont access runid on a network run
6 :     #include "runid.h"
7 :     #endif
8 :    
9 :     ErrorHandler::ErrorHandler() {
10 :     files = new StrStack();
11 :     uselog = 0;
12 :     numwarn = 0;
13 :     runopt = 0;
14 :     nanflag = 0;
15 :     loglevel = LOGINFO;
16 :     }
17 :    
18 :     ErrorHandler::~ErrorHandler() {
19 :     delete files;
20 :     }
21 :    
22 :     void ErrorHandler::setLogLevel(int level) {
23 :     switch (level) {
24 :     case 0:
25 :     //no messages displayed at all - only used for paramin runs
26 :     loglevel = LOGNONE;
27 :     break;
28 :     case 1:
29 :     //only get the failure messages written to std::cerr
30 :     //gadget will exit with exit(EXIT_FAILURE) once it receives a message here
31 :     loglevel = LOGFAIL;
32 :     break;
33 :     case 2:
34 :     //also get the information messages written to std::cout
35 :     loglevel = LOGINFO;
36 :     break;
37 :     case 3:
38 :     //also get the warning messages written to std::cerr
39 :     loglevel = LOGWARN;
40 :     break;
41 :     case 4:
42 :     //also get debug messages to be written to the logfile (if it exists)
43 :     loglevel = LOGDEBUG;
44 :     break;
45 :     case 5:
46 :     //also get information messages to be written to the logfile (if it exists)
47 :     loglevel = LOGMESSAGE;
48 :     break;
49 :     case 6:
50 :     //also get more detailed messages to be written to the logfile (if it exists)
51 :     loglevel = LOGDETAIL;
52 :     break;
53 :     default:
54 :     cerr << "Error in errorhandler - invalid log level " << level << endl;
55 :     break;
56 :     }
57 :     }
58 :    
59 :     void ErrorHandler::setLogFile(const char* filename) {
60 :     uselog = 1;
61 :     logfile.open(filename, ios::out);
62 :     this->checkIfFailure(logfile, filename);
63 :     #ifndef GADGET_NETWORK
64 :     RUNID.Print(logfile);
65 :     #endif
66 :     logfile << "Log file to record Gadget actions that take place during this run\n\n";
67 :     logfile.flush();
68 :     }
69 :    
70 :     void ErrorHandler::Open(const char* filename) {
71 :     this->logMessage(LOGMESSAGE, "Opening file", filename);
72 :     files->storeString(filename);
73 :     }
74 :    
75 :     void ErrorHandler::Close() {
76 :     if (loglevel >= LOGMESSAGE) {
77 :     char* strFilename = files->sendTop();
78 :     this->logMessage(LOGMESSAGE, "Closing file", strFilename);
79 :     delete[] strFilename;
80 :     }
81 :     files->clearString();
82 :     }
83 :    
84 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg) {
85 :     if (mlevel > loglevel)
86 :     return;
87 :    
88 :     switch (mlevel) {
89 :     case LOGNONE:
90 :     break;
91 :     case LOGFAIL:
92 :     if (uselog) {
93 :     logfile << msg << endl;
94 :     logfile.flush();
95 :     }
96 :     cerr << msg << endl;
97 :     exit(EXIT_FAILURE);
98 :     break;
99 :     case LOGINFO:
100 :     if (uselog) {
101 :     logfile << msg << endl;
102 :     logfile.flush();
103 :     }
104 :     cout << msg << endl;
105 :     break;
106 :     case LOGWARN:
107 :     numwarn++;
108 :     if (uselog) {
109 :     logfile << msg << endl;
110 :     logfile.flush();
111 :     }
112 :     cerr << msg << endl;
113 :     break;
114 :     case LOGDEBUG:
115 :     case LOGMESSAGE:
116 :     case LOGDETAIL:
117 :     if (uselog) {
118 :     logfile << msg << endl;
119 :     logfile.flush();
120 :     }
121 :     break;
122 :     default:
123 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
124 :     break;
125 :     }
126 :     }
127 :    
128 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg1, const char* msg2) {
129 :     if (mlevel > loglevel)
130 :     return;
131 :    
132 :     switch (mlevel) {
133 :     case LOGNONE:
134 :     break;
135 :     case LOGFAIL:
136 :     if (uselog) {
137 :     logfile << msg1 << sep << msg2 << endl;
138 :     logfile.flush();
139 :     }
140 :     cerr << msg1 << sep << msg2 << endl;
141 :     exit(EXIT_FAILURE);
142 :     break;
143 :     case LOGINFO:
144 :     if (uselog) {
145 :     logfile << msg1 << sep << msg2 << endl;
146 :     logfile.flush();
147 :     }
148 :     cout << msg1 << sep << msg2 << endl;
149 :     break;
150 :     case LOGWARN:
151 :     numwarn++;
152 :     if (uselog) {
153 :     logfile << msg1 << sep << msg2 << endl;
154 :     logfile.flush();
155 :     }
156 :     cerr << msg1 << sep << msg2 << endl;
157 :     break;
158 :     case LOGDEBUG:
159 :     case LOGMESSAGE:
160 :     case LOGDETAIL:
161 :     if (uselog) {
162 :     logfile << msg1 << sep << msg2 << endl;
163 :     logfile.flush();
164 :     }
165 :     break;
166 :     default:
167 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
168 :     break;
169 :     }
170 :     }
171 :    
172 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg, int number) {
173 :     if (mlevel > loglevel)
174 :     return;
175 :    
176 :     switch (mlevel) {
177 :     case LOGNONE:
178 :     break;
179 :     case LOGFAIL:
180 :     if (uselog) {
181 :     logfile << msg << sep << number << endl;
182 :     logfile.flush();
183 :     }
184 :     cerr << msg << sep << number << endl;
185 :     exit(EXIT_FAILURE);
186 :     break;
187 :     case LOGINFO:
188 :     if (uselog) {
189 :     logfile << msg << sep << number << endl;
190 :     logfile.flush();
191 :     }
192 :     cout << msg << sep << number << endl;
193 :     break;
194 :     case LOGWARN:
195 :     numwarn++;
196 :     if (uselog) {
197 :     logfile << msg << sep << number << endl;
198 :     logfile.flush();
199 :     }
200 :     cerr << msg << sep << number << endl;
201 :     break;
202 :     case LOGDEBUG:
203 :     case LOGMESSAGE:
204 :     case LOGDETAIL:
205 :     if (uselog) {
206 :     logfile << msg << sep << number << endl;
207 :     logfile.flush();
208 :     }
209 :     break;
210 :     default:
211 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
212 :     break;
213 :     }
214 :     }
215 :    
216 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg, double number) {
217 :     if (mlevel > loglevel)
218 :     return;
219 :    
220 :     switch (mlevel) {
221 :     case LOGNONE:
222 :     break;
223 :     case LOGFAIL:
224 :     if (uselog) {
225 :     logfile << msg << sep << number << endl;
226 :     logfile.flush();
227 :     }
228 :     cerr << msg << sep << number << endl;
229 :     exit(EXIT_FAILURE);
230 :     break;
231 :     case LOGINFO:
232 :     if (uselog) {
233 :     logfile << msg << sep << number << endl;
234 :     logfile.flush();
235 :     }
236 :     cout << msg << sep << number << endl;
237 :     break;
238 :     case LOGWARN:
239 :     numwarn++;
240 :     if (uselog) {
241 :     logfile << msg << sep << number << endl;
242 :     logfile.flush();
243 :     }
244 :     cerr << msg << sep << number << endl;
245 :     break;
246 :     case LOGDEBUG:
247 :     case LOGMESSAGE:
248 :     case LOGDETAIL:
249 :     if (uselog) {
250 :     logfile << msg << sep << number << endl;
251 :     logfile.flush();
252 :     }
253 :     break;
254 :     default:
255 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
256 :     break;
257 :     }
258 :     }
259 :    
260 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg1, int number, const char* msg2) {
261 :     if (mlevel > loglevel)
262 :     return;
263 :    
264 :     switch (mlevel) {
265 :     case LOGNONE:
266 :     break;
267 :     case LOGFAIL:
268 :     if (uselog) {
269 :     logfile << msg1 << sep << number << sep << msg2 << endl;
270 :     logfile.flush();
271 :     }
272 :     cerr << msg1 << sep << number << sep << msg2 << endl;
273 :     exit(EXIT_FAILURE);
274 :     break;
275 :     case LOGINFO:
276 :     if (uselog) {
277 :     logfile << msg1 << sep << number << sep << msg2 << endl;
278 :     logfile.flush();
279 :     }
280 :     cout << msg1 << sep << number << sep << msg2 << endl;
281 :     break;
282 :     case LOGWARN:
283 :     numwarn++;
284 :     if (uselog) {
285 :     logfile << msg1 << sep << number << sep << msg2 << endl;
286 :     logfile.flush();
287 :     }
288 :     cerr << msg1 << sep << number << sep << msg2 << endl;
289 :     break;
290 :     case LOGDEBUG:
291 :     case LOGMESSAGE:
292 :     case LOGDETAIL:
293 :     if (uselog) {
294 :     logfile << msg1 << sep << number << sep << msg2 << endl;
295 :     logfile.flush();
296 :     }
297 :     break;
298 :     default:
299 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
300 :     break;
301 :     }
302 :     }
303 :    
304 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg1, double number, const char* msg2) {
305 :     if (mlevel > loglevel)
306 :     return;
307 :    
308 :     switch (mlevel) {
309 :     case LOGNONE:
310 :     break;
311 :     case LOGFAIL:
312 :     if (uselog) {
313 :     logfile << msg1 << sep << number << sep << msg2 << endl;
314 :     logfile.flush();
315 :     }
316 :     cerr << msg1 << sep << number << sep << msg2 << endl;
317 :     exit(EXIT_FAILURE);
318 :     break;
319 :     case LOGINFO:
320 :     if (uselog) {
321 :     logfile << msg1 << sep << number << sep << msg2 << endl;
322 :     logfile.flush();
323 :     }
324 :     cout << msg1 << sep << number << sep << msg2 << endl;
325 :     break;
326 :     case LOGWARN:
327 :     numwarn++;
328 :     if (uselog) {
329 :     logfile << msg1 << sep << number << sep << msg2 << endl;
330 :     logfile.flush();
331 :     }
332 :     cerr << msg1 << sep << number << sep << msg2 << endl;
333 :     break;
334 :     case LOGDEBUG:
335 :     case LOGMESSAGE:
336 :     case LOGDETAIL:
337 :     if (uselog) {
338 :     logfile << msg1 << sep << number << sep << msg2 << endl;
339 :     logfile.flush();
340 :     }
341 :     break;
342 :     default:
343 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
344 :     break;
345 :     }
346 :     }
347 :    
348 :     void ErrorHandler::logMessage(LogLevel mlevel, DoubleVector vec) {
349 :     if (mlevel > loglevel)
350 :     return;
351 :    
352 :     int i;
353 :     switch (mlevel) {
354 :     case LOGNONE:
355 :     break;
356 :     case LOGFAIL:
357 :     if (uselog) {
358 :     for (i = 0; i < vec.Size(); i++)
359 :     logfile << vec[i] << sep;
360 :     logfile << endl;
361 :     logfile.flush();
362 :     }
363 :     for (i = 0; i < vec.Size(); i++)
364 :     cerr << vec[i] << sep;
365 :     cerr << endl;
366 :     exit(EXIT_FAILURE);
367 :     break;
368 :     case LOGINFO:
369 :     if (uselog) {
370 :     for (i = 0; i < vec.Size(); i++)
371 :     logfile << vec[i] << sep;
372 :     logfile << endl;
373 :     logfile.flush();
374 :     }
375 :     for (i = 0; i < vec.Size(); i++)
376 :     cout << vec[i] << sep;
377 :     cout << endl;
378 :     break;
379 :     case LOGWARN:
380 :     numwarn++;
381 :     if (uselog) {
382 :     for (i = 0; i < vec.Size(); i++)
383 :     logfile << vec[i] << sep;
384 :     logfile << endl;
385 :     logfile.flush();
386 :     }
387 :     for (i = 0; i < vec.Size(); i++)
388 :     cerr << vec[i] << sep;
389 :     cerr << endl;
390 :     break;
391 :     case LOGDEBUG:
392 :     case LOGMESSAGE:
393 :     case LOGDETAIL:
394 :     if (uselog) {
395 :     for (i = 0; i < vec.Size(); i++)
396 :     logfile << vec[i] << sep;
397 :     logfile << endl;
398 :     logfile.flush();
399 :     }
400 :     break;
401 :     default:
402 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
403 :     break;
404 :     }
405 :     }
406 :    
407 :     void ErrorHandler::logMessageNaN(LogLevel mlevel, const char* msg) {
408 :    
409 :     nanflag = 1;
410 :     if (mlevel > loglevel)
411 :     return;
412 :    
413 :     switch (mlevel) {
414 :     case LOGNONE:
415 :     break;
416 :     case LOGFAIL:
417 :     if (uselog) {
418 :     logfile << "Error in model - NaN found" << sep << msg << endl;
419 :     logfile.flush();
420 :     }
421 :     cerr << "Error in model - NaN found" << sep << msg << endl;
422 :     exit(EXIT_FAILURE);
423 :     break;
424 :     case LOGINFO:
425 :     if (uselog) {
426 :     logfile << "Error in model - NaN found" << sep << msg << endl;
427 :     logfile.flush();
428 :     }
429 :     cout << "Error in model - NaN found" << sep << msg << endl;
430 :     break;
431 :     case LOGWARN:
432 :     numwarn++;
433 :     if (uselog) {
434 :     logfile << "Error in model - NaN found" << sep << msg << endl;
435 :     logfile.flush();
436 :     }
437 :     cerr << "Error in model - NaN found" << sep << msg << endl;
438 :     break;
439 :     case LOGDEBUG:
440 :     case LOGMESSAGE:
441 :     case LOGDETAIL:
442 :     if (uselog) {
443 :     logfile << "Error in model - NaN found" << sep << msg << endl;
444 :     logfile.flush();
445 :     }
446 :     break;
447 :     default:
448 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
449 :     break;
450 :     }
451 :     }
452 :    
453 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg) {
454 :     if (mlevel > loglevel)
455 :     return;
456 :    
457 :     char* strFilename = files->sendTop();
458 :     switch (mlevel) {
459 :     case LOGNONE:
460 :     case LOGINFO:
461 :     break;
462 :     case LOGFAIL:
463 :     if (uselog) {
464 :     if (files->getSize() == 0)
465 :     logfile << "Error on commandline - " << msg << endl;
466 :     else
467 :     logfile << "Error in file " << strFilename << " - " << msg << endl;
468 :     logfile.flush();
469 :     }
470 :     if (files->getSize() == 0)
471 :     cerr << "Error on commandline - " << msg << endl;
472 :     else
473 :     cerr << "Error in file " << strFilename << " - " << msg << endl;
474 :     delete[] strFilename;
475 :     exit(EXIT_FAILURE);
476 :     break;
477 :     case LOGWARN:
478 :     numwarn++;
479 :     if (uselog) {
480 :     if (files->getSize() == 0)
481 :     logfile << "Warning on commandline - " << msg << endl;
482 :     else
483 :     logfile << "Warning in file " << strFilename << " - " << msg << endl;
484 :     logfile.flush();
485 :     }
486 :     if (files->getSize() == 0)
487 :     cerr << "Warning on commandline - " << msg << endl;
488 :     else
489 :     cerr << "Warning in file " << strFilename << " - " << msg << endl;
490 :     break;
491 :     case LOGDEBUG:
492 :     case LOGMESSAGE:
493 :     case LOGDETAIL:
494 :     if (uselog) {
495 :     logfile << "Message in file " << strFilename << " - " << msg << endl;
496 :     logfile.flush();
497 :     }
498 :     break;
499 :     default:
500 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
501 :     break;
502 :     }
503 :     delete[] strFilename;
504 :     }
505 :    
506 :    
507 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg, int number) {
508 :     if (mlevel > loglevel)
509 :     return;
510 :    
511 :     char* strFilename = files->sendTop();
512 :     switch (mlevel) {
513 :     case LOGNONE:
514 :     case LOGINFO:
515 :     break;
516 :     case LOGFAIL:
517 :     if (uselog) {
518 :     if (files->getSize() == 0)
519 :     logfile << "Error on commandline - " << msg << sep << number << endl;
520 :     else
521 :     logfile << "Error in file " << strFilename << " - " << msg << sep << number << endl;
522 :     logfile.flush();
523 :     }
524 :     if (files->getSize() == 0)
525 :     cerr << "Error on commandline - " << msg << sep << number << endl;
526 :     else
527 :     cerr << "Error in file " << strFilename << " - " << msg << sep << number << endl;
528 :     delete[] strFilename;
529 :     exit(EXIT_FAILURE);
530 :     break;
531 :     case LOGWARN:
532 :     numwarn++;
533 :     if (uselog) {
534 :     if (files->getSize() == 0)
535 :     logfile << "Warning on commandline - " << msg << sep << number << endl;
536 :     else
537 :     logfile << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
538 :     logfile.flush();
539 :     }
540 :     if (files->getSize() == 0)
541 :     cerr << "Warning on commandline - " << msg << sep << number << endl;
542 :     else
543 :     cerr << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
544 :     break;
545 :     case LOGDEBUG:
546 :     case LOGMESSAGE:
547 :     case LOGDETAIL:
548 :     if (uselog) {
549 :     logfile << "Message in file " << strFilename << " - " << msg << sep << number << endl;
550 :     logfile.flush();
551 :     }
552 :     break;
553 :     default:
554 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
555 :     break;
556 :     }
557 :     delete[] strFilename;
558 :     }
559 :    
560 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg, double number) {
561 :     if (mlevel > loglevel)
562 :     return;
563 :    
564 :     char* strFilename = files->sendTop();
565 :     switch (mlevel) {
566 :     case LOGNONE:
567 :     case LOGINFO:
568 :     break;
569 :     case LOGFAIL:
570 :     if (uselog) {
571 :     if (files->getSize() == 0)
572 :     logfile << "Error on commandline - " << msg << sep << number << endl;
573 :     else
574 :     logfile << "Error in file " << strFilename << " - " << msg << sep << number << endl;
575 :     logfile.flush();
576 :     }
577 :     if (files->getSize() == 0)
578 :     cerr << "Error on commandline - " << msg << sep << number << endl;
579 :     else
580 :     cerr << "Error in file " << strFilename << " - " << msg << sep << number << endl;
581 :     delete[] strFilename;
582 :     exit(EXIT_FAILURE);
583 :     break;
584 :     case LOGWARN:
585 :     numwarn++;
586 :     if (uselog) {
587 :     if (files->getSize() == 0)
588 :     logfile << "Warning on commandline - " << msg << sep << number << endl;
589 :     else
590 :     logfile << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
591 :     logfile.flush();
592 :     }
593 :     if (files->getSize() == 0)
594 :     cerr << "Warning on commandline - " << msg << sep << number << endl;
595 :     else
596 :     cerr << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
597 :     break;
598 :     case LOGDEBUG:
599 :     case LOGMESSAGE:
600 :     case LOGDETAIL:
601 :     if (uselog) {
602 :     logfile << "Message in file " << strFilename << " - " << msg << sep << number << endl;
603 :     logfile.flush();
604 :     }
605 :     break;
606 :     default:
607 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
608 :     break;
609 :     }
610 :     delete[] strFilename;
611 :     }
612 :    
613 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg1, const char* msg2) {
614 :     if (mlevel > loglevel)
615 :     return;
616 :    
617 :     char* strFilename = files->sendTop();
618 :     switch (mlevel) {
619 :     case LOGNONE:
620 :     case LOGINFO:
621 :     break;
622 :     case LOGFAIL:
623 :     if (uselog) {
624 :     if (files->getSize() == 0)
625 :     logfile << "Error on commandline - " << msg1 << sep << msg2 << endl;
626 :     else
627 :     logfile << "Error in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
628 :     logfile.flush();
629 :     }
630 :     if (files->getSize() == 0)
631 :     cerr << "Error on commandline - " << msg1 << sep << msg2 << endl;
632 :     else
633 :     cerr << "Error in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
634 :     delete[] strFilename;
635 :     exit(EXIT_FAILURE);
636 :     break;
637 :     case LOGWARN:
638 :     numwarn++;
639 :     if (uselog) {
640 :     if (files->getSize() == 0)
641 :     logfile << "Warning on commandline - " << msg1 << sep << msg2 << endl;
642 :     else
643 :     logfile << "Warning in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
644 :     logfile.flush();
645 :     }
646 :     if (files->getSize() == 0)
647 :     cerr << "Warning on commandline - " << msg1 << sep << msg2 << endl;
648 :     else
649 :     cerr << "Warning in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
650 :     break;
651 :     case LOGDEBUG:
652 :     case LOGMESSAGE:
653 :     case LOGDETAIL:
654 :     if (uselog) {
655 :     logfile << "Message in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
656 :     logfile.flush();
657 :     }
658 :     break;
659 :     default:
660 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
661 :     break;
662 :     }
663 :     delete[] strFilename;
664 :     }
665 :    
666 :     void ErrorHandler::logFileEOFMessage(LogLevel mlevel) {
667 :     if (mlevel > loglevel)
668 :     return;
669 :    
670 :     char* strFilename = files->sendTop();
671 :     switch (mlevel) {
672 :     case LOGNONE:
673 :     case LOGINFO:
674 :     break;
675 :     case LOGFAIL:
676 :     if (uselog) {
677 :     logfile << "Unexpected end of file " << strFilename << endl;
678 :     logfile.flush();
679 :     }
680 :     cerr << "Unexpected end of file " << strFilename << endl;
681 :     delete[] strFilename;
682 :     exit(EXIT_FAILURE);
683 :     break;
684 :     case LOGWARN:
685 :     numwarn++;
686 :     if (uselog) {
687 :     logfile << "Unexpected end of file " << strFilename << endl;
688 :     logfile.flush();
689 :     }
690 :     cerr << "Unexpected end of file " << strFilename << endl;
691 :     break;
692 :     case LOGDEBUG:
693 :     case LOGMESSAGE:
694 :     case LOGDETAIL:
695 :     if (uselog) {
696 :     logfile << "Unexpected end of file " << strFilename << endl;
697 :     logfile.flush();
698 :     }
699 :     break;
700 :     default:
701 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
702 :     break;
703 :     }
704 :     delete[] strFilename;
705 :     }
706 :    
707 :     void ErrorHandler::logFileUnexpected(LogLevel mlevel, const char* msg1, const char* msg2) {
708 :     if (mlevel > loglevel)
709 :     return;
710 :    
711 :     char* strFilename = files->sendTop();
712 :     switch (mlevel) {
713 :     case LOGNONE:
714 :     case LOGINFO:
715 :     break;
716 :     case LOGFAIL:
717 :     if (uselog) {
718 :     logfile << "Error in file " << strFilename << endl
719 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
720 :     logfile.flush();
721 :     }
722 :     cerr << "Error in file " << strFilename << endl
723 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
724 :     delete[] strFilename;
725 :     exit(EXIT_FAILURE);
726 :     break;
727 :     case LOGWARN:
728 :     numwarn++;
729 :     if (uselog) {
730 :     logfile << "Warning in file " << strFilename << endl
731 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
732 :     logfile.flush();
733 :     }
734 :     cerr << "Warning in file " << strFilename << endl
735 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
736 :     break;
737 :     case LOGDEBUG:
738 :     case LOGMESSAGE:
739 :     case LOGDETAIL:
740 :     if (uselog) {
741 :     logfile << "Message in file " << strFilename << endl
742 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
743 :     logfile.flush();
744 :     }
745 :     break;
746 :     default:
747 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
748 :     break;
749 :     }
750 :     delete[] strFilename;
751 :     }
752 :    
753 :     void ErrorHandler::checkIfFailure(ios& infile, const char* text) {
754 :     if (infile.fail()) {
755 :     if ((uselog) && (loglevel >= LOGMESSAGE)) {
756 :     logfile << "Checking to see if file " << text << " can be opened ... failed" << endl;
757 :     logfile.flush();
758 :     }
759 :     this->logFileMessage(LOGFAIL, "failed to open datafile", text);
760 :     }
761 :    
762 :     if ((uselog) && (loglevel >= LOGMESSAGE)) {
763 :     logfile << "Checking to see if file " << text << " can be opened ... OK" << endl;
764 :     logfile.flush();
765 :     }
766 :     }
767 :    
768 :     void ErrorHandler::logFinish() {
769 :     if (numwarn > 0)
770 :     this->logMessage(LOGINFO, "\nTotal number of warnings was", numwarn);
771 :    
772 :     if (uselog) {
773 :     if (runopt)
774 :     logfile << "\nGadget optimisation finished OK - runtime was ";
775 :     else
776 :     logfile << "\nGadget simulation finished OK - runtime was ";
777 :     logfile.flush();
778 :     #ifndef GADGET_NETWORK
779 :     RUNID.printTime(logfile);
780 :     #endif
781 :     logfile.close();
782 :     logfile.clear();
783 :     uselog = 0;
784 :     }
785 :    
786 :     if (loglevel >= LOGINFO) {
787 :     if (runopt) {
788 :     cout << "\nGadget optimisation finished OK - runtime was ";
789 :     #ifndef GADGET_NETWORK
790 :     RUNID.printTime(cout);
791 :     #endif
792 :     } else
793 :     cout << "\nGadget simulation finished OK\n";
794 :     cout << endl;
795 :     }
796 :     }

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge