Changeset 5837 for branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/TOOLS/SIREN/src/logger.f90
- Timestamp:
- 2015-10-26T15:59:39+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/TOOLS/SIREN/src/logger.f90
r4213 r5837 6 6 ! 7 7 ! DESCRIPTION: 8 !> @brief This module create logger file and inform it depending 9 !> of verbosity choose between : 8 !> @brief This module create logger file and allow to fill it depending of verbosity. 9 !> @details 10 !> verbosity could be choosen between : 10 11 !> - trace : Most detailed information. 11 12 !> - debug : Detailed information on the flow through the system. … … 18 19 !> default verbosity is warning 19 20 ! 20 !> @details21 !> If total number of error exceeded maximum number22 !> authorized, program stop.23 !> 24 !> to open/create logger file:<br/>21 !> If total number of error exceeded maximum number 22 !> authorized, program stop. 23 !> 24 !> to open/create logger file:<br/> 25 !> @code 25 26 !> CALL logger_open(cd_file, [cd_verbosity,] [id_loggerid,] [id_maxerror]) 26 !> - cd_file is logger file name 27 !> - cd_verbosity is verbosity to be used (optional, default 'warning') 28 !> - id_loggerid is file id (optional, use only to flush) 29 !> - id_maxerror is the mximum number of error authorized before stop program (optional, default 5) 30 !> 31 !> to close logger file:<br/> 32 !> CALL logger_close() 33 !> 34 !> to write header in logger file:<br/> 35 !> CALL logger_header() 36 !> 37 !> to write footer in logger file:<br/> 38 !> CALL logger_footer() 39 !> 40 !> to flushing output:<br/> 41 !> CALL logger_flush() 42 !> 43 !> to write TRACE message in logger file:<br/> 44 !> CALL logger_trace(cd_msg) 45 !> - cd_msg is TRACE message 46 !> 47 !> to write DEBUG message in logger file:<br/> 48 !> CALL logger_debug(cd_msg) 49 !> - cd_msg is DEBUG message 50 !> 51 !> to write INFO message in logger file:<br/> 52 !> CALL logger_info(cd_msg) 53 !> - cd_msg is INFO message 54 !> 55 !> to write WARNING message in logger file:<br/> 56 !> CALL logger_warn(cd_msg) 57 !> - cd_msg is WARNING message 58 !> 59 !> to write ERROR message in logger file:<br/> 60 !> CALL logger_error(cd_msg) 61 !> - cd_msg is ERROR message 62 !> 63 !> to write FATAL message in logger file:<br/> 64 !> CALL logger_fatal(cd_msg) 65 !> - cd_msg is FATAL message 66 !> 67 !> Examples :<br /> 27 !> @endcode 28 !> - cd_file is logger file name 29 !> - cd_verbosity is verbosity to be used [optional, default 'warning'] 30 !> - id_loggerid is file id [optional, use only to flush] 31 !> - id_maxerror is the maximum number of error authorized before program stop [optional, default 5] 32 !> 33 !> to close logger file:<br/> 34 !> @code 35 !> CALL logger_close() 36 !> @endcode 37 !> 38 !> to write header in logger file:<br/> 39 !> @code 40 !> CALL logger_header() 41 !> @endcode 42 !> 43 !> to write footer in logger file:<br/> 44 !> @code 45 !> CALL logger_footer() 46 !> @endcode 47 !> 48 !> to flushing output:<br/> 49 !> @code 50 !> CALL logger_flush() 51 !> @endcode 52 !> 53 !> to write TRACE message in logger file:<br/> 54 !> @code 55 !> CALL logger_trace(cd_msg [,ld_flush]) 56 !> @endcode 57 !> - cd_msg is TRACE message 58 !> - ld_flush to flush output [optional] 59 !> 60 !> to write DEBUG message in logger file:<br/> 61 !> @code 62 !> CALL logger_debug(cd_msg [,ld_flush]) 63 !> @endcode 64 !> - cd_msg is DEBUG message 65 !> - ld_flush to flush output [optional] 66 !> 67 !> to write INFO message in logger file:<br/> 68 !> @code 69 !> CALL logger_info(cd_msg [,ld_flush]) 70 !> @endcode 71 !> - cd_msg is INFO message 72 !> - ld_flush to flush output [optional] 73 !> 74 !> to write WARNING message in logger file:<br/> 75 !> @code 76 !> CALL logger_warn(cd_msg [,ld_flush]) 77 !> @endcode 78 !> - cd_msg is WARNING message 79 !> - ld_flush to flush output [optional] 80 !> 81 !> to write ERROR message in logger file:<br/> 82 !> @code 83 !> CALL logger_error(cd_msg [,ld_flush]) 84 !> @endcode 85 !> - cd_msg is ERROR message 86 !> - ld_flush to flush output [optional] 87 !> 88 !> to write FATAL message in logger file:<br/> 89 !> @code 90 !> CALL logger_fatal(cd_msg) 91 !> @endcode 92 !> - cd_msg is FATAL message 93 !> 94 !> Examples :<br /> 95 !> @code 68 96 !> CALL logger_open('loggerfile.txt','info') 69 97 !> 70 !> CALL logger_header()<br /> 71 !> CALL logger_info('une petite info')<br /> 72 !> CALL logger_debug('une info de debug')<br /> 73 !> CALL logger_warn('une info de warning')<br /> 74 !> CALL logger_error('une info d erreur')<br /> 75 !> CALL logger_footer()<br /> 76 !> CALL logger_close()<br /> 77 !> 78 !> !--------------------------------------------------------------------<br /> 98 !> CALL logger_header() 99 !> CALL logger_debug('une info de debug') 100 !> CALL logger_info('une info') 101 !> CALL logger_warn('un warning') 102 !> CALL logger_error('une erreur') 103 !> CALL logger_footer() 104 !> CALL logger_close() 105 !> @endcode 106 !> 107 !> @code 79 108 !> CALL logger_open('loggerfile.txt') 80 109 !> 81 !> CALL logger_header()<br /> 82 !> CALL logger_info('une petite info')<br /> 83 !> CALL logger_debug('une info de debug')<br /> 84 !> CALL logger_warn('une info de warning')<br /> 85 !> CALL logger_error('une info d erreur')<br /> 86 !> CALL logger_footer()<br /> 87 !> CALL logger_close()<br /> 110 !> CALL logger_header() 111 !> CALL logger_debug('une info de debug') 112 !> CALL logger_info('une info') 113 !> CALL logger_warn('un warning') 114 !> CALL logger_error('une erreur') 115 !> CALL logger_footer() 116 !> CALL logger_close() 117 !> @endcode 88 118 ! 89 119 !> @author 90 120 !> J.Paul 91 121 ! REVISION HISTORY: 92 !> @date Nov , 2013- Initial Version122 !> @date November, 2013- Initial Version 93 123 !> 94 124 !> @note Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 95 !>96 !> @todo97 !> - verifier flush remet pas compteur error à zero98 125 !---------------------------------------------------------------------- 99 126 MODULE logger … … 101 128 USE fct ! basic useful function 102 129 IMPLICIT NONE 103 PRIVATE104 130 ! NOTE_avoid_public_variables_if_possible 105 131 106 132 ! type and variable 107 !PUBLIC :: TLOGGER ! logger structure 133 PRIVATE :: TLOGGER !< logger structure 134 135 PRIVATE :: tm_logger !< logger structure 136 PRIVATE :: im_nverbosity !< number of log level 137 PRIVATE :: cm_verbosity !< verbosity array 108 138 109 139 ! function and subroutine 110 PUBLIC :: logger_open ! create a log file with given verbosity111 PUBLIC :: logger_close ! close log file112 PUBLIC :: logger_ flush ! flushing output113 PUBLIC :: logger_ header ! write header on log file114 PUBLIC :: logger_f ooter ! write footer on log file115 PUBLIC :: logger_trace ! write trace message in log file116 PUBLIC :: logger_debug ! write debug message in log file117 PUBLIC :: logger_info ! write info message in log file118 PUBLIC :: logger_warn ! write warning message in log file119 PUBLIC :: logger_error ! write error message in log file120 PUBLIC :: logger_fatal ! write fatal message in log file, and stop140 PUBLIC :: logger_open !< create a log file with given verbosity 141 PUBLIC :: logger_close !< close log file 142 PUBLIC :: logger_header !< write header on log file 143 PUBLIC :: logger_footer !< write footer on log file 144 PUBLIC :: logger_flush !< flushing output 145 PUBLIC :: logger_trace !< write trace message in log file 146 PUBLIC :: logger_debug !< write debug message in log file 147 PUBLIC :: logger_info !< write info message in log file 148 PUBLIC :: logger_warn !< write warning message in log file 149 PUBLIC :: logger_error !< write error message in log file 150 PUBLIC :: logger_fatal !< write fatal message in log file, and stop 121 151 122 152 PRIVATE :: logger__write ! cut message to get maximum of 80 character by line in log file 123 153 124 !> @struct TLOG 125 TYPE TLOGGER 154 TYPE TLOGGER !< logger structure 126 155 INTEGER(i4) :: i_id = 0 !< log file id 127 156 CHARACTER(LEN=lc) :: c_name !< log file name 128 157 CHARACTER(LEN=lc) :: c_verbosity = "warning" !< verbosity choose 129 CHARACTER(LEN=lc) :: c_verb = "" !< tableof "verbosities" to used158 CHARACTER(LEN=lc) :: c_verb = "" !< array of "verbosities" to used 130 159 INTEGER(i4) :: i_nerror = 0 !< number of error 131 160 INTEGER(i4) :: i_nfatal = 0 !< number of fatal error … … 135 164 ! module variable 136 165 INTEGER(i4), PARAMETER :: im_nverbosity=6 !< number of log level 137 CHARACTER(len=*), DIMENSION(im_nverbosity), PARAMETER :: cm_verbosity= & !< verbosity table166 CHARACTER(len=*), DIMENSION(im_nverbosity), PARAMETER :: cm_verbosity= & !< verbosity array 138 167 & (/ 'trace ',& 139 168 & 'debug ',& … … 147 176 CONTAINS 148 177 !------------------------------------------------------------------- 149 !> @brief This subroutine create a log file with given verbosity. 150 !> 151 !> @author J.Paul 152 !> - Nov, 2013- Initial Version 153 ! 154 !> @param[in] cd_file : log file name 155 !> @param[in] cd_verbosity : log file verbosity 156 !> @param[in] id_logid : log file id (use to flush) 157 !> @param[in] id_maxerror : maximum number of error 158 !------------------------------------------------------------------- 159 ! @code 178 !> @brief This subroutine create a log file with default verbosity 179 !> ('warning'). 180 !> @details 181 !> Optionally verbosity could be change to 182 !> ('trace','debug','info',warning','error','fatal').<br/> 183 !> Optionally maximum number of error allowed could be change. 184 !> 185 !> @author J.Paul 186 !> - November, 2013- Initial Version 187 ! 188 !> @param[in] cd_file log file name 189 !> @param[in] cd_verbosity log file verbosity 190 !> @param[in] id_logid log file id (use to flush) 191 !> @param[in] id_maxerror maximum number of error 192 !------------------------------------------------------------------- 160 193 SUBROUTINE logger_open(cd_file, cd_verbosity, id_logid, id_maxerror) 161 194 IMPLICIT NONE … … 212 245 213 246 END SUBROUTINE logger_open 214 ! @endcode215 247 !------------------------------------------------------------------- 216 248 !> @brief This subroutine close a log file. 217 249 !> 218 250 !> @author J.Paul 219 !> - Nov, 2013- Initial Version 220 ! 221 !------------------------------------------------------------------- 222 ! @code 251 !> - November, 2013- Initial Version 252 !------------------------------------------------------------------- 223 253 SUBROUTINE logger_close() 224 254 IMPLICIT NONE … … 227 257 !---------------------------------------------------------------- 228 258 IF( tm_logger%i_id /= 0 )THEN 259 tm_logger%i_id = 0 229 260 CLOSE( tm_logger%i_id, & 230 261 & IOSTAT=il_status) … … 237 268 238 269 END SUBROUTINE logger_close 239 ! @endcode240 270 !------------------------------------------------------------------- 241 271 !> @brief This subroutine flushing output into log file. 242 272 !> 243 273 !> @author J.Paul 244 !> - Nov, 2013- Initial Version 245 ! 246 !------------------------------------------------------------------- 247 ! @code 274 !> - November, 2013- Initial Version 275 !------------------------------------------------------------------- 248 276 SUBROUTINE logger_flush() 249 277 IMPLICIT NONE … … 260 288 261 289 END SUBROUTINE logger_flush 262 ! @endcode263 290 !------------------------------------------------------------------- 264 291 !> @brief This subroutine write header on log file. 265 292 !> 266 293 !> @author J.Paul 267 !> - Nov, 2013- Initial Version 268 ! 269 !------------------------------------------------------------------- 270 ! @code 294 !> - November, 2013- Initial Version 295 !------------------------------------------------------------------- 271 296 RECURSIVE SUBROUTINE logger_header() 272 297 IMPLICIT NONE 273 298 ! local variable 274 INTEGER(i4) :: il_status299 INTEGER(i4) :: il_status 275 300 !---------------------------------------------------------------- 276 301 IF( tm_logger%i_id /= 0 )THEN 277 302 WRITE( tm_logger%i_id, & 278 & FMT='( a/a/a)', &303 & FMT='(4(a/))', & 279 304 & IOSTAT=il_status ) & 280 & "--------------------------------------------------", 281 & "INIT : log start with verbosity "//&282 & TRIM(tm_logger%c_verbosity), &305 & "--------------------------------------------------",& 306 & "INIT : verbosity "//TRIM(tm_logger%c_verbosity),& 307 & "INIT : max error "//TRIM(fct_str(tm_logger%i_maxerror)), & 283 308 & "--------------------------------------------------" 284 309 CALL fct_err(il_status) … … 290 315 291 316 END SUBROUTINE logger_header 292 ! @endcode293 317 !------------------------------------------------------------------- 294 318 !> @brief This subroutine write footer on log file. 295 319 !> 296 320 !> @author J.Paul 297 !> - Nov, 2013- Initial Version 298 ! 299 !------------------------------------------------------------------- 300 ! @code 321 !> - November, 2013- Initial Version 322 !------------------------------------------------------------------- 301 323 SUBROUTINE logger_footer() 302 324 IMPLICIT NONE 303 325 ! local variable 304 INTEGER(i4) :: il_status326 INTEGER(i4) :: il_status 305 327 !---------------------------------------------------------------- 306 328 IF( tm_logger%i_id /= 0 )THEN 307 329 WRITE( tm_logger%i_id, & 308 & FMT='( a/a/a/a/a)', &330 & FMT='(4(/a))', & 309 331 & IOSTAT=il_status ) & 310 332 & "--------------------------------------------------",& 311 & "END : log ended ", 333 & "END : log ended ", & 312 334 & "END : "//TRIM(fct_str(tm_logger%i_nerror))// & 313 335 & " ERROR detected ", & … … 322 344 ENDIF 323 345 END SUBROUTINE logger_footer 324 ! @endcode325 346 !------------------------------------------------------------------- 326 347 !> @brief This subroutine write trace message on log file. 327 !> 328 !> @author J.Paul329 !> - Nov, 2013- Initial Version330 ! 331 !> @param[in] cd_msg : message to write332 ! > @param[in] ld_flush : flushing ouput333 ! 334 ! -------------------------------------------------------------------335 ! @code348 !> @details 349 !> Optionally you could flush output. 350 !> 351 !> @author J.Paul 352 !> - November, 2013- Initial Version 353 ! 354 !> @param[in] cd_msg message to write 355 !> @param[in] ld_flush flushing ouput 356 !------------------------------------------------------------------- 336 357 SUBROUTINE logger_trace(cd_msg, ld_flush) 337 358 IMPLICIT NONE … … 357 378 ENDIF 358 379 END SUBROUTINE logger_trace 359 ! @endcode360 380 !------------------------------------------------------------------- 361 381 !> @brief This subroutine write debug message on log file. 362 !> 363 !> @author J.Paul364 !> - Nov, 2013- Initial Version365 ! 366 !> @param[in] cd_msg : message to write367 ! > @param[in] ld_flush : flushing ouput368 ! 369 ! -------------------------------------------------------------------370 ! @code382 !> @details 383 !> Optionally you could flush output. 384 !> 385 !> @author J.Paul 386 !> - November, 2013- Initial Version 387 ! 388 !> @param[in] cd_msg message to write 389 !> @param[in] ld_flush flushing ouput 390 !------------------------------------------------------------------- 371 391 SUBROUTINE logger_debug(cd_msg, ld_flush) 372 392 IMPLICIT NONE … … 392 412 ENDIF 393 413 END SUBROUTINE logger_debug 394 ! @endcode395 414 !------------------------------------------------------------------- 396 415 !> @brief This subroutine write info message on log file. 397 !> 398 !> @author J.Paul399 !> - Nov, 2013- Initial Version400 ! 401 !> @param[in] cd_msg : message to write402 ! > @param[in] ld_flush : flushing ouput403 ! 404 ! -------------------------------------------------------------------405 ! @code416 !> @details 417 !> Optionally you could flush output. 418 !> 419 !> @author J.Paul 420 !> - November, 2013- Initial Version 421 ! 422 !> @param[in] cd_msg message to write 423 !> @param[in] ld_flush flushing ouput 424 !------------------------------------------------------------------- 406 425 SUBROUTINE logger_info(cd_msg, ld_flush) 407 426 IMPLICIT NONE … … 427 446 ENDIF 428 447 END SUBROUTINE logger_info 429 ! @endcode430 448 !------------------------------------------------------------------- 431 449 !> @brief This subroutine write warning message on log file. 432 !> 433 !> @author J.Paul434 !> - Nov, 2013- Initial Version435 ! 436 !> @param[in] cd_msg : message to write437 ! > @param[in] ld_flush : flushing ouput438 ! 439 ! -------------------------------------------------------------------440 ! @code450 !> @details 451 !> Optionally you could flush output. 452 !> 453 !> @author J.Paul 454 !> - November, 2013- Initial Version 455 ! 456 !> @param[in] cd_msg message to write 457 !> @param[in] ld_flush flushing ouput 458 !------------------------------------------------------------------- 441 459 SUBROUTINE logger_warn(cd_msg, ld_flush) 442 460 IMPLICIT NONE … … 462 480 ENDIF 463 481 END SUBROUTINE logger_warn 464 ! @endcode465 482 !------------------------------------------------------------------- 466 483 !> @brief This subroutine write error message on log file. 467 !> 468 !> @author J.Paul469 !> - Nov, 2013- Initial Version470 ! 471 !> @param[in] cd_msg : message to write472 ! > @param[in] ld_flush : flushing ouput473 ! 474 ! -------------------------------------------------------------------475 ! @code484 !> @details 485 !> Optionally you could flush output. 486 !> 487 !> @author J.Paul 488 !> - November, 2013- Initial Version 489 ! 490 !> @param[in] cd_msg message to write 491 !> @param[in] ld_flush flushing ouput 492 !------------------------------------------------------------------- 476 493 SUBROUTINE logger_error(cd_msg, ld_flush) 477 494 IMPLICIT NONE … … 510 527 511 528 END SUBROUTINE logger_error 512 ! @endcode513 529 !------------------------------------------------------------------- 514 530 !> @brief This subroutine write fatal error message on log file, … … 516 532 !> 517 533 !> @author J.Paul 518 !> - Nov, 2013- Initial Version 519 ! 520 !> @param[in] cd_msg : message to write 521 ! 522 !------------------------------------------------------------------- 523 ! @code 534 !> - November, 2013- Initial Version 535 ! 536 !> @param[in] cd_msg message to write 537 !------------------------------------------------------------------- 524 538 RECURSIVE SUBROUTINE logger_fatal(cd_msg) 525 539 IMPLICIT NONE … … 537 551 CALL logger_close() 538 552 553 WRITE(*,*) 'FATAL ERROR' 539 554 STOP 540 555 ENDIF … … 545 560 ENDIF 546 561 END SUBROUTINE logger_fatal 547 ! @endcode548 562 !------------------------------------------------------------------- 549 563 !> @brief This subroutine cut message to get maximum of 80 character … … 551 565 !> 552 566 !> @author J.Paul 553 !> - Nov, 2013- Initial Version 554 ! 555 !> @param[in] cd_verb : verbosity of the message to write 556 !> @param[in] cd_msg : message to write 557 !------------------------------------------------------------------- 558 ! @code 567 !> - November, 2013- Initial Version 568 ! 569 !> @param[in] cd_verb verbosity of the message to write 570 !> @param[in] cd_msg message to write 571 !------------------------------------------------------------------- 559 572 SUBROUTINE logger__write(cd_verb, cd_msg) 560 573 IMPLICIT NONE … … 602 615 603 616 END SUBROUTINE logger__write 604 ! @endcode605 617 END MODULE logger 606 618
Note: See TracChangeset
for help on using the changeset viewer.