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 20 - (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 : agomez 20 #pragma omp critical (logchar)
88 : agomez 1 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 : agomez 20 #pragma omp critical (logcharchar)
133 : agomez 1 switch (mlevel) {
134 :     case LOGNONE:
135 :     break;
136 :     case LOGFAIL:
137 :     if (uselog) {
138 :     logfile << msg1 << sep << msg2 << endl;
139 :     logfile.flush();
140 :     }
141 :     cerr << msg1 << sep << msg2 << endl;
142 :     exit(EXIT_FAILURE);
143 :     break;
144 :     case LOGINFO:
145 :     if (uselog) {
146 :     logfile << msg1 << sep << msg2 << endl;
147 :     logfile.flush();
148 :     }
149 :     cout << msg1 << sep << msg2 << endl;
150 :     break;
151 :     case LOGWARN:
152 :     numwarn++;
153 :     if (uselog) {
154 :     logfile << msg1 << sep << msg2 << endl;
155 :     logfile.flush();
156 :     }
157 :     cerr << msg1 << sep << msg2 << endl;
158 :     break;
159 :     case LOGDEBUG:
160 :     case LOGMESSAGE:
161 :     case LOGDETAIL:
162 :     if (uselog) {
163 :     logfile << msg1 << sep << msg2 << endl;
164 :     logfile.flush();
165 :     }
166 :     break;
167 :     default:
168 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
169 :     break;
170 :     }
171 :     }
172 :    
173 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg, int number) {
174 :     if (mlevel > loglevel)
175 :     return;
176 :    
177 : agomez 20 #pragma omp critical (logCharInt)
178 : agomez 1 switch (mlevel) {
179 :     case LOGNONE:
180 :     break;
181 :     case LOGFAIL:
182 :     if (uselog) {
183 :     logfile << msg << sep << number << endl;
184 :     logfile.flush();
185 :     }
186 :     cerr << msg << sep << number << endl;
187 :     exit(EXIT_FAILURE);
188 :     break;
189 :     case LOGINFO:
190 :     if (uselog) {
191 :     logfile << msg << sep << number << endl;
192 :     logfile.flush();
193 :     }
194 :     cout << msg << sep << number << endl;
195 :     break;
196 :     case LOGWARN:
197 :     numwarn++;
198 :     if (uselog) {
199 :     logfile << msg << sep << number << endl;
200 :     logfile.flush();
201 :     }
202 :     cerr << msg << sep << number << endl;
203 :     break;
204 :     case LOGDEBUG:
205 :     case LOGMESSAGE:
206 :     case LOGDETAIL:
207 :     if (uselog) {
208 :     logfile << msg << sep << number << endl;
209 :     logfile.flush();
210 :     }
211 :     break;
212 :     default:
213 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
214 :     break;
215 :     }
216 :     }
217 :    
218 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg, double number) {
219 :     if (mlevel > loglevel)
220 :     return;
221 :    
222 :     switch (mlevel) {
223 :     case LOGNONE:
224 :     break;
225 :     case LOGFAIL:
226 :     if (uselog) {
227 :     logfile << msg << sep << number << endl;
228 :     logfile.flush();
229 :     }
230 :     cerr << msg << sep << number << endl;
231 :     exit(EXIT_FAILURE);
232 :     break;
233 :     case LOGINFO:
234 :     if (uselog) {
235 :     logfile << msg << sep << number << endl;
236 :     logfile.flush();
237 :     }
238 :     cout << msg << sep << number << endl;
239 :     break;
240 :     case LOGWARN:
241 :     numwarn++;
242 :     if (uselog) {
243 :     logfile << msg << sep << number << endl;
244 :     logfile.flush();
245 :     }
246 :     cerr << msg << sep << number << endl;
247 :     break;
248 :     case LOGDEBUG:
249 :     case LOGMESSAGE:
250 :     case LOGDETAIL:
251 :     if (uselog) {
252 :     logfile << msg << sep << number << endl;
253 :     logfile.flush();
254 :     }
255 :     break;
256 :     default:
257 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
258 :     break;
259 :     }
260 :     }
261 :    
262 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg1, int number, const char* msg2) {
263 :     if (mlevel > loglevel)
264 :     return;
265 :    
266 :     switch (mlevel) {
267 :     case LOGNONE:
268 :     break;
269 :     case LOGFAIL:
270 :     if (uselog) {
271 :     logfile << msg1 << sep << number << sep << msg2 << endl;
272 :     logfile.flush();
273 :     }
274 :     cerr << msg1 << sep << number << sep << msg2 << endl;
275 :     exit(EXIT_FAILURE);
276 :     break;
277 :     case LOGINFO:
278 :     if (uselog) {
279 :     logfile << msg1 << sep << number << sep << msg2 << endl;
280 :     logfile.flush();
281 :     }
282 :     cout << msg1 << sep << number << sep << msg2 << endl;
283 :     break;
284 :     case LOGWARN:
285 :     numwarn++;
286 :     if (uselog) {
287 :     logfile << msg1 << sep << number << sep << msg2 << endl;
288 :     logfile.flush();
289 :     }
290 :     cerr << msg1 << sep << number << sep << msg2 << endl;
291 :     break;
292 :     case LOGDEBUG:
293 :     case LOGMESSAGE:
294 :     case LOGDETAIL:
295 :     if (uselog) {
296 :     logfile << msg1 << sep << number << sep << msg2 << endl;
297 :     logfile.flush();
298 :     }
299 :     break;
300 :     default:
301 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
302 :     break;
303 :     }
304 :     }
305 :    
306 :     void ErrorHandler::logMessage(LogLevel mlevel, const char* msg1, double number, const char* msg2) {
307 :     if (mlevel > loglevel)
308 :     return;
309 :    
310 :     switch (mlevel) {
311 :     case LOGNONE:
312 :     break;
313 :     case LOGFAIL:
314 :     if (uselog) {
315 :     logfile << msg1 << sep << number << sep << msg2 << endl;
316 :     logfile.flush();
317 :     }
318 :     cerr << msg1 << sep << number << sep << msg2 << endl;
319 :     exit(EXIT_FAILURE);
320 :     break;
321 :     case LOGINFO:
322 :     if (uselog) {
323 :     logfile << msg1 << sep << number << sep << msg2 << endl;
324 :     logfile.flush();
325 :     }
326 :     cout << msg1 << sep << number << sep << msg2 << endl;
327 :     break;
328 :     case LOGWARN:
329 :     numwarn++;
330 :     if (uselog) {
331 :     logfile << msg1 << sep << number << sep << msg2 << endl;
332 :     logfile.flush();
333 :     }
334 :     cerr << msg1 << sep << number << sep << msg2 << endl;
335 :     break;
336 :     case LOGDEBUG:
337 :     case LOGMESSAGE:
338 :     case LOGDETAIL:
339 :     if (uselog) {
340 :     logfile << msg1 << sep << number << sep << msg2 << endl;
341 :     logfile.flush();
342 :     }
343 :     break;
344 :     default:
345 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
346 :     break;
347 :     }
348 :     }
349 :    
350 :     void ErrorHandler::logMessage(LogLevel mlevel, DoubleVector vec) {
351 :     if (mlevel > loglevel)
352 :     return;
353 :    
354 :     int i;
355 :     switch (mlevel) {
356 :     case LOGNONE:
357 :     break;
358 :     case LOGFAIL:
359 :     if (uselog) {
360 :     for (i = 0; i < vec.Size(); i++)
361 :     logfile << vec[i] << sep;
362 :     logfile << endl;
363 :     logfile.flush();
364 :     }
365 :     for (i = 0; i < vec.Size(); i++)
366 :     cerr << vec[i] << sep;
367 :     cerr << endl;
368 :     exit(EXIT_FAILURE);
369 :     break;
370 :     case LOGINFO:
371 :     if (uselog) {
372 :     for (i = 0; i < vec.Size(); i++)
373 :     logfile << vec[i] << sep;
374 :     logfile << endl;
375 :     logfile.flush();
376 :     }
377 :     for (i = 0; i < vec.Size(); i++)
378 :     cout << vec[i] << sep;
379 :     cout << endl;
380 :     break;
381 :     case LOGWARN:
382 :     numwarn++;
383 :     if (uselog) {
384 :     for (i = 0; i < vec.Size(); i++)
385 :     logfile << vec[i] << sep;
386 :     logfile << endl;
387 :     logfile.flush();
388 :     }
389 :     for (i = 0; i < vec.Size(); i++)
390 :     cerr << vec[i] << sep;
391 :     cerr << endl;
392 :     break;
393 :     case LOGDEBUG:
394 :     case LOGMESSAGE:
395 :     case LOGDETAIL:
396 :     if (uselog) {
397 :     for (i = 0; i < vec.Size(); i++)
398 :     logfile << vec[i] << sep;
399 :     logfile << endl;
400 :     logfile.flush();
401 :     }
402 :     break;
403 :     default:
404 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
405 :     break;
406 :     }
407 :     }
408 :    
409 :     void ErrorHandler::logMessageNaN(LogLevel mlevel, const char* msg) {
410 :    
411 :     nanflag = 1;
412 :     if (mlevel > loglevel)
413 :     return;
414 :    
415 :     switch (mlevel) {
416 :     case LOGNONE:
417 :     break;
418 :     case LOGFAIL:
419 :     if (uselog) {
420 :     logfile << "Error in model - NaN found" << sep << msg << endl;
421 :     logfile.flush();
422 :     }
423 :     cerr << "Error in model - NaN found" << sep << msg << endl;
424 :     exit(EXIT_FAILURE);
425 :     break;
426 :     case LOGINFO:
427 :     if (uselog) {
428 :     logfile << "Error in model - NaN found" << sep << msg << endl;
429 :     logfile.flush();
430 :     }
431 :     cout << "Error in model - NaN found" << sep << msg << endl;
432 :     break;
433 :     case LOGWARN:
434 :     numwarn++;
435 :     if (uselog) {
436 :     logfile << "Error in model - NaN found" << sep << msg << endl;
437 :     logfile.flush();
438 :     }
439 :     cerr << "Error in model - NaN found" << sep << msg << endl;
440 :     break;
441 :     case LOGDEBUG:
442 :     case LOGMESSAGE:
443 :     case LOGDETAIL:
444 :     if (uselog) {
445 :     logfile << "Error in model - NaN found" << sep << msg << endl;
446 :     logfile.flush();
447 :     }
448 :     break;
449 :     default:
450 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
451 :     break;
452 :     }
453 :     }
454 :    
455 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg) {
456 :     if (mlevel > loglevel)
457 :     return;
458 :    
459 :     char* strFilename = files->sendTop();
460 :     switch (mlevel) {
461 :     case LOGNONE:
462 :     case LOGINFO:
463 :     break;
464 :     case LOGFAIL:
465 :     if (uselog) {
466 :     if (files->getSize() == 0)
467 :     logfile << "Error on commandline - " << msg << endl;
468 :     else
469 :     logfile << "Error in file " << strFilename << " - " << msg << endl;
470 :     logfile.flush();
471 :     }
472 :     if (files->getSize() == 0)
473 :     cerr << "Error on commandline - " << msg << endl;
474 :     else
475 :     cerr << "Error in file " << strFilename << " - " << msg << endl;
476 :     delete[] strFilename;
477 :     exit(EXIT_FAILURE);
478 :     break;
479 :     case LOGWARN:
480 :     numwarn++;
481 :     if (uselog) {
482 :     if (files->getSize() == 0)
483 :     logfile << "Warning on commandline - " << msg << endl;
484 :     else
485 :     logfile << "Warning in file " << strFilename << " - " << msg << endl;
486 :     logfile.flush();
487 :     }
488 :     if (files->getSize() == 0)
489 :     cerr << "Warning on commandline - " << msg << endl;
490 :     else
491 :     cerr << "Warning in file " << strFilename << " - " << msg << endl;
492 :     break;
493 :     case LOGDEBUG:
494 :     case LOGMESSAGE:
495 :     case LOGDETAIL:
496 :     if (uselog) {
497 :     logfile << "Message in file " << strFilename << " - " << msg << endl;
498 :     logfile.flush();
499 :     }
500 :     break;
501 :     default:
502 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
503 :     break;
504 :     }
505 :     delete[] strFilename;
506 :     }
507 :    
508 :    
509 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg, int number) {
510 :     if (mlevel > loglevel)
511 :     return;
512 :    
513 :     char* strFilename = files->sendTop();
514 :     switch (mlevel) {
515 :     case LOGNONE:
516 :     case LOGINFO:
517 :     break;
518 :     case LOGFAIL:
519 :     if (uselog) {
520 :     if (files->getSize() == 0)
521 :     logfile << "Error on commandline - " << msg << sep << number << endl;
522 :     else
523 :     logfile << "Error in file " << strFilename << " - " << msg << sep << number << endl;
524 :     logfile.flush();
525 :     }
526 :     if (files->getSize() == 0)
527 :     cerr << "Error on commandline - " << msg << sep << number << endl;
528 :     else
529 :     cerr << "Error in file " << strFilename << " - " << msg << sep << number << endl;
530 :     delete[] strFilename;
531 :     exit(EXIT_FAILURE);
532 :     break;
533 :     case LOGWARN:
534 :     numwarn++;
535 :     if (uselog) {
536 :     if (files->getSize() == 0)
537 :     logfile << "Warning on commandline - " << msg << sep << number << endl;
538 :     else
539 :     logfile << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
540 :     logfile.flush();
541 :     }
542 :     if (files->getSize() == 0)
543 :     cerr << "Warning on commandline - " << msg << sep << number << endl;
544 :     else
545 :     cerr << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
546 :     break;
547 :     case LOGDEBUG:
548 :     case LOGMESSAGE:
549 :     case LOGDETAIL:
550 :     if (uselog) {
551 :     logfile << "Message in file " << strFilename << " - " << msg << sep << number << endl;
552 :     logfile.flush();
553 :     }
554 :     break;
555 :     default:
556 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
557 :     break;
558 :     }
559 :     delete[] strFilename;
560 :     }
561 :    
562 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg, double number) {
563 :     if (mlevel > loglevel)
564 :     return;
565 :    
566 :     char* strFilename = files->sendTop();
567 :     switch (mlevel) {
568 :     case LOGNONE:
569 :     case LOGINFO:
570 :     break;
571 :     case LOGFAIL:
572 :     if (uselog) {
573 :     if (files->getSize() == 0)
574 :     logfile << "Error on commandline - " << msg << sep << number << endl;
575 :     else
576 :     logfile << "Error in file " << strFilename << " - " << msg << sep << number << endl;
577 :     logfile.flush();
578 :     }
579 :     if (files->getSize() == 0)
580 :     cerr << "Error on commandline - " << msg << sep << number << endl;
581 :     else
582 :     cerr << "Error in file " << strFilename << " - " << msg << sep << number << endl;
583 :     delete[] strFilename;
584 :     exit(EXIT_FAILURE);
585 :     break;
586 :     case LOGWARN:
587 :     numwarn++;
588 :     if (uselog) {
589 :     if (files->getSize() == 0)
590 :     logfile << "Warning on commandline - " << msg << sep << number << endl;
591 :     else
592 :     logfile << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
593 :     logfile.flush();
594 :     }
595 :     if (files->getSize() == 0)
596 :     cerr << "Warning on commandline - " << msg << sep << number << endl;
597 :     else
598 :     cerr << "Warning in file " << strFilename << " - " << msg << sep << number << endl;
599 :     break;
600 :     case LOGDEBUG:
601 :     case LOGMESSAGE:
602 :     case LOGDETAIL:
603 :     if (uselog) {
604 :     logfile << "Message in file " << strFilename << " - " << msg << sep << number << endl;
605 :     logfile.flush();
606 :     }
607 :     break;
608 :     default:
609 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
610 :     break;
611 :     }
612 :     delete[] strFilename;
613 :     }
614 :    
615 :     void ErrorHandler::logFileMessage(LogLevel mlevel, const char* msg1, const char* msg2) {
616 :     if (mlevel > loglevel)
617 :     return;
618 :    
619 :     char* strFilename = files->sendTop();
620 :     switch (mlevel) {
621 :     case LOGNONE:
622 :     case LOGINFO:
623 :     break;
624 :     case LOGFAIL:
625 :     if (uselog) {
626 :     if (files->getSize() == 0)
627 :     logfile << "Error on commandline - " << msg1 << sep << msg2 << endl;
628 :     else
629 :     logfile << "Error in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
630 :     logfile.flush();
631 :     }
632 :     if (files->getSize() == 0)
633 :     cerr << "Error on commandline - " << msg1 << sep << msg2 << endl;
634 :     else
635 :     cerr << "Error in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
636 :     delete[] strFilename;
637 :     exit(EXIT_FAILURE);
638 :     break;
639 :     case LOGWARN:
640 :     numwarn++;
641 :     if (uselog) {
642 :     if (files->getSize() == 0)
643 :     logfile << "Warning on commandline - " << msg1 << sep << msg2 << endl;
644 :     else
645 :     logfile << "Warning in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
646 :     logfile.flush();
647 :     }
648 :     if (files->getSize() == 0)
649 :     cerr << "Warning on commandline - " << msg1 << sep << msg2 << endl;
650 :     else
651 :     cerr << "Warning in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
652 :     break;
653 :     case LOGDEBUG:
654 :     case LOGMESSAGE:
655 :     case LOGDETAIL:
656 :     if (uselog) {
657 :     logfile << "Message in file " << strFilename << " - " << msg1 << sep << msg2 << endl;
658 :     logfile.flush();
659 :     }
660 :     break;
661 :     default:
662 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
663 :     break;
664 :     }
665 :     delete[] strFilename;
666 :     }
667 :    
668 :     void ErrorHandler::logFileEOFMessage(LogLevel mlevel) {
669 :     if (mlevel > loglevel)
670 :     return;
671 :    
672 :     char* strFilename = files->sendTop();
673 :     switch (mlevel) {
674 :     case LOGNONE:
675 :     case LOGINFO:
676 :     break;
677 :     case LOGFAIL:
678 :     if (uselog) {
679 :     logfile << "Unexpected end of file " << strFilename << endl;
680 :     logfile.flush();
681 :     }
682 :     cerr << "Unexpected end of file " << strFilename << endl;
683 :     delete[] strFilename;
684 :     exit(EXIT_FAILURE);
685 :     break;
686 :     case LOGWARN:
687 :     numwarn++;
688 :     if (uselog) {
689 :     logfile << "Unexpected end of file " << strFilename << endl;
690 :     logfile.flush();
691 :     }
692 :     cerr << "Unexpected end of file " << strFilename << endl;
693 :     break;
694 :     case LOGDEBUG:
695 :     case LOGMESSAGE:
696 :     case LOGDETAIL:
697 :     if (uselog) {
698 :     logfile << "Unexpected end of file " << strFilename << endl;
699 :     logfile.flush();
700 :     }
701 :     break;
702 :     default:
703 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
704 :     break;
705 :     }
706 :     delete[] strFilename;
707 :     }
708 :    
709 :     void ErrorHandler::logFileUnexpected(LogLevel mlevel, const char* msg1, const char* msg2) {
710 :     if (mlevel > loglevel)
711 :     return;
712 :    
713 :     char* strFilename = files->sendTop();
714 :     switch (mlevel) {
715 :     case LOGNONE:
716 :     case LOGINFO:
717 :     break;
718 :     case LOGFAIL:
719 :     if (uselog) {
720 :     logfile << "Error in file " << strFilename << endl
721 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
722 :     logfile.flush();
723 :     }
724 :     cerr << "Error in file " << strFilename << endl
725 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
726 :     delete[] strFilename;
727 :     exit(EXIT_FAILURE);
728 :     break;
729 :     case LOGWARN:
730 :     numwarn++;
731 :     if (uselog) {
732 :     logfile << "Warning in file " << strFilename << endl
733 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
734 :     logfile.flush();
735 :     }
736 :     cerr << "Warning in file " << strFilename << endl
737 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
738 :     break;
739 :     case LOGDEBUG:
740 :     case LOGMESSAGE:
741 :     case LOGDETAIL:
742 :     if (uselog) {
743 :     logfile << "Message in file " << strFilename << endl
744 :     << "Expected " << msg1 << " but found instead " << msg2 << endl;
745 :     logfile.flush();
746 :     }
747 :     break;
748 :     default:
749 :     cerr << "Error in errorhandler - invalid log level " << mlevel << endl;
750 :     break;
751 :     }
752 :     delete[] strFilename;
753 :     }
754 :    
755 :     void ErrorHandler::checkIfFailure(ios& infile, const char* text) {
756 :     if (infile.fail()) {
757 :     if ((uselog) && (loglevel >= LOGMESSAGE)) {
758 :     logfile << "Checking to see if file " << text << " can be opened ... failed" << endl;
759 :     logfile.flush();
760 :     }
761 :     this->logFileMessage(LOGFAIL, "failed to open datafile", text);
762 :     }
763 :    
764 :     if ((uselog) && (loglevel >= LOGMESSAGE)) {
765 :     logfile << "Checking to see if file " << text << " can be opened ... OK" << endl;
766 :     logfile.flush();
767 :     }
768 :     }
769 :    
770 :     void ErrorHandler::logFinish() {
771 :     if (numwarn > 0)
772 :     this->logMessage(LOGINFO, "\nTotal number of warnings was", numwarn);
773 :    
774 :     if (uselog) {
775 :     if (runopt)
776 :     logfile << "\nGadget optimisation finished OK - runtime was ";
777 :     else
778 :     logfile << "\nGadget simulation finished OK - runtime was ";
779 :     logfile.flush();
780 :     #ifndef GADGET_NETWORK
781 :     RUNID.printTime(logfile);
782 :     #endif
783 :     logfile.close();
784 :     logfile.clear();
785 :     uselog = 0;
786 :     }
787 :    
788 :     if (loglevel >= LOGINFO) {
789 :     if (runopt) {
790 :     cout << "\nGadget optimisation finished OK - runtime was ";
791 :     #ifndef GADGET_NETWORK
792 :     RUNID.printTime(cout);
793 :     #endif
794 :     } else
795 :     cout << "\nGadget simulation finished OK\n";
796 :     cout << endl;
797 :     }
798 :     }

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

Powered By FusionForge