New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 5602 for branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/logger.f90 – NEMO

Ignore:
Timestamp:
2015-07-16T13:55:15+02:00 (9 years ago)
Author:
cbricaud
Message:

merge change from trunk rev 5003 to 5519 ( rev where branche 3.6_stable were created )

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/logger.f90

    r4213 r5602  
    66! 
    77! 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 : 
    1011!>    - trace : Most detailed information. 
    1112!>    - debug : Detailed information on the flow through the system. 
     
    1819!>  default verbosity is warning 
    1920! 
    20 !> @details 
    21 !>    If total number of error exceeded maximum number  
    22 !>    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 
    2526!>    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 
    6896!>   CALL logger_open('loggerfile.txt','info') 
    6997!> 
    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 
    79108!>   CALL logger_open('loggerfile.txt') 
    80109!> 
    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 
    88118! 
    89119!> @author 
    90120!> J.Paul 
    91121! REVISION HISTORY: 
    92 !> @date Nov, 2013- Initial Version 
     122!> @date November, 2013- Initial Version 
    93123!> 
    94124!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    95 !> 
    96 !> @todo 
    97 !> - verifier flush remet pas compteur error à zero 
    98125!---------------------------------------------------------------------- 
    99126MODULE logger 
     
    101128   USE fct                             ! basic useful function 
    102129   IMPLICIT NONE 
    103    PRIVATE 
    104130   ! NOTE_avoid_public_variables_if_possible 
    105131 
    106132   ! 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 
    108138 
    109139   ! function and subroutine 
    110    PUBLIC :: logger_open        ! create a log file with given verbosity 
    111    PUBLIC :: logger_close       ! close log file 
    112    PUBLIC :: logger_flush       ! flushing output 
    113    PUBLIC :: logger_header      ! write header on log file 
    114    PUBLIC :: logger_footer      ! write footer on log file 
    115    PUBLIC :: logger_trace       ! write trace    message in log file 
    116    PUBLIC :: logger_debug       ! write debug    message in log file  
    117    PUBLIC :: logger_info        ! write info     message in log file 
    118    PUBLIC :: logger_warn        ! write warning  message in log file 
    119    PUBLIC :: logger_error       ! write error    message in log file 
    120    PUBLIC :: logger_fatal       ! write fatal    message in log file, and stop 
     140   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 
    121151 
    122152   PRIVATE :: logger__write     ! cut message to get maximum of 80 character by line in log file 
    123153 
    124    !> @struct TLOG 
    125    TYPE TLOGGER 
     154   TYPE TLOGGER   !< logger structure 
    126155      INTEGER(i4)       :: i_id = 0                 !< log file id 
    127156      CHARACTER(LEN=lc) :: c_name                   !< log file name 
    128157      CHARACTER(LEN=lc) :: c_verbosity = "warning"  !< verbosity choose 
    129       CHARACTER(LEN=lc) :: c_verb = ""              !< table of "verbosities" to used  
     158      CHARACTER(LEN=lc) :: c_verb = ""              !< array of "verbosities" to used  
    130159      INTEGER(i4)       :: i_nerror   = 0           !< number of error 
    131160      INTEGER(i4)       :: i_nfatal   = 0           !< number of fatal error 
     
    135164   !  module variable 
    136165   INTEGER(i4), PARAMETER :: im_nverbosity=6     !< number of log level 
    137    CHARACTER(len=*), DIMENSION(im_nverbosity), PARAMETER :: cm_verbosity= & !< verbosity table  
     166   CHARACTER(len=*), DIMENSION(im_nverbosity), PARAMETER :: cm_verbosity= & !< verbosity array  
    138167   &               (/ 'trace   ',& 
    139168   &                  'debug   ',& 
     
    147176CONTAINS 
    148177   !------------------------------------------------------------------- 
    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   !------------------------------------------------------------------- 
    160193   SUBROUTINE logger_open(cd_file, cd_verbosity, id_logid, id_maxerror) 
    161194      IMPLICIT NONE 
     
    212245 
    213246   END SUBROUTINE logger_open 
    214    ! @endcode 
    215247   !------------------------------------------------------------------- 
    216248   !> @brief This subroutine close a log file. 
    217249   !> 
    218250   !> @author J.Paul 
    219    !> - Nov, 2013- Initial Version 
    220    ! 
    221    !------------------------------------------------------------------- 
    222    ! @code 
     251   !> - November, 2013- Initial Version 
     252   !------------------------------------------------------------------- 
    223253   SUBROUTINE logger_close() 
    224254      IMPLICIT NONE 
     
    227257      !---------------------------------------------------------------- 
    228258      IF( tm_logger%i_id /= 0 )THEN 
     259         tm_logger%i_id = 0 
    229260         CLOSE( tm_logger%i_id, & 
    230261         &      IOSTAT=il_status)       
     
    237268 
    238269   END SUBROUTINE logger_close 
    239    ! @endcode 
    240270   !------------------------------------------------------------------- 
    241271   !> @brief This subroutine flushing output into log file. 
    242272   !> 
    243273   !> @author J.Paul 
    244    !> - Nov, 2013- Initial Version 
    245    ! 
    246    !------------------------------------------------------------------- 
    247    ! @code 
     274   !> - November, 2013- Initial Version 
     275   !------------------------------------------------------------------- 
    248276   SUBROUTINE logger_flush() 
    249277      IMPLICIT NONE 
     
    260288 
    261289   END SUBROUTINE logger_flush 
    262    ! @endcode    
    263290   !------------------------------------------------------------------- 
    264291   !> @brief This subroutine write header on log file. 
    265292   !> 
    266293   !> @author J.Paul 
    267    !> - Nov, 2013- Initial Version 
    268    ! 
    269    !------------------------------------------------------------------- 
    270    ! @code 
     294   !> - November, 2013- Initial Version 
     295   !------------------------------------------------------------------- 
    271296   RECURSIVE SUBROUTINE logger_header() 
    272297      IMPLICIT NONE 
    273298      ! local variable 
    274       INTEGER(i4) :: il_status 
     299      INTEGER(i4)       :: il_status 
    275300      !---------------------------------------------------------------- 
    276301      IF( tm_logger%i_id /= 0 )THEN 
    277302         WRITE( tm_logger%i_id,    & 
    278             &   FMT='(a/a/a)',     & 
     303            &   FMT='(4(a/))',     & 
    279304            &   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)), & 
    283308            &   "--------------------------------------------------" 
    284309         CALL fct_err(il_status) 
     
    290315 
    291316   END SUBROUTINE logger_header 
    292    ! @endcode    
    293317   !------------------------------------------------------------------- 
    294318   !> @brief This subroutine write footer on log file. 
    295319   !> 
    296320   !> @author J.Paul 
    297    !> - Nov, 2013- Initial Version 
    298    ! 
    299    !------------------------------------------------------------------- 
    300    ! @code 
     321   !> - November, 2013- Initial Version 
     322   !------------------------------------------------------------------- 
    301323   SUBROUTINE logger_footer() 
    302324      IMPLICIT NONE 
    303325      ! local variable 
    304       INTEGER(i4) :: il_status 
     326      INTEGER(i4)       :: il_status 
    305327      !---------------------------------------------------------------- 
    306328      IF( tm_logger%i_id /= 0 )THEN 
    307329         WRITE( tm_logger%i_id,    & 
    308             &   FMT='(a/a/a/a/a)',     & 
     330            &   FMT='(4(/a))',     & 
    309331            &   IOSTAT=il_status ) & 
    310332            &   "--------------------------------------------------",& 
    311             &   "END      : log ended ",                             & 
     333            &   "END      : log ended ",              & 
    312334            &   "END      : "//TRIM(fct_str(tm_logger%i_nerror))//   & 
    313335            &   " ERROR detected ",                                  & 
     
    322344      ENDIF 
    323345   END SUBROUTINE logger_footer 
    324    ! @endcode    
    325346   !------------------------------------------------------------------- 
    326347   !> @brief This subroutine write trace message on log file. 
    327    !> 
    328    !> @author J.Paul 
    329    !> - Nov, 2013- Initial Version 
    330    ! 
    331    !> @param[in] cd_msg : message to write 
    332    !> @param[in] ld_flush : flushing ouput 
    333    ! 
    334    !------------------------------------------------------------------- 
    335    ! @code 
     348   !> @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   !------------------------------------------------------------------- 
    336357   SUBROUTINE logger_trace(cd_msg, ld_flush) 
    337358      IMPLICIT NONE 
     
    357378      ENDIF 
    358379   END SUBROUTINE logger_trace 
    359    ! @endcode    
    360380   !------------------------------------------------------------------- 
    361381   !> @brief This subroutine write debug message on log file. 
    362    !> 
    363    !> @author J.Paul 
    364    !> - Nov, 2013- Initial Version 
    365    ! 
    366    !> @param[in] cd_msg : message to write 
    367    !> @param[in] ld_flush : flushing ouput 
    368    ! 
    369    !------------------------------------------------------------------- 
    370    ! @code 
     382   !> @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   !------------------------------------------------------------------- 
    371391   SUBROUTINE logger_debug(cd_msg, ld_flush) 
    372392      IMPLICIT NONE 
     
    392412      ENDIF 
    393413   END SUBROUTINE logger_debug 
    394    ! @endcode    
    395414   !------------------------------------------------------------------- 
    396415   !> @brief This subroutine write info message on log file. 
    397    !> 
    398    !> @author J.Paul 
    399    !> - Nov, 2013- Initial Version 
    400    ! 
    401    !> @param[in] cd_msg : message to write 
    402    !> @param[in] ld_flush : flushing ouput 
    403    ! 
    404    !------------------------------------------------------------------- 
    405    ! @code 
     416   !> @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   !------------------------------------------------------------------- 
    406425   SUBROUTINE logger_info(cd_msg, ld_flush) 
    407426      IMPLICIT NONE 
     
    427446      ENDIF 
    428447   END SUBROUTINE logger_info 
    429    ! @endcode     
    430448   !------------------------------------------------------------------- 
    431449   !> @brief This subroutine write warning message on log file. 
    432    !> 
    433    !> @author J.Paul 
    434    !> - Nov, 2013- Initial Version 
    435    ! 
    436    !> @param[in] cd_msg : message to write 
    437    !> @param[in] ld_flush : flushing ouput 
    438    ! 
    439    !------------------------------------------------------------------- 
    440    ! @code 
     450   !> @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   !------------------------------------------------------------------- 
    441459   SUBROUTINE logger_warn(cd_msg, ld_flush) 
    442460      IMPLICIT NONE 
     
    462480      ENDIF 
    463481   END SUBROUTINE logger_warn 
    464    ! @endcode    
    465482   !------------------------------------------------------------------- 
    466483   !> @brief This subroutine write error message on log file. 
    467    !> 
    468    !> @author J.Paul 
    469    !> - Nov, 2013- Initial Version 
    470    ! 
    471    !> @param[in] cd_msg : message to write 
    472    !> @param[in] ld_flush : flushing ouput 
    473    ! 
    474    !------------------------------------------------------------------- 
    475    ! @code 
     484   !> @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   !------------------------------------------------------------------- 
    476493   SUBROUTINE logger_error(cd_msg, ld_flush) 
    477494      IMPLICIT NONE 
     
    510527 
    511528   END SUBROUTINE logger_error 
    512    ! @endcode    
    513529   !------------------------------------------------------------------- 
    514530   !> @brief This subroutine write fatal error message on log file,  
     
    516532   !> 
    517533   !> @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   !------------------------------------------------------------------- 
    524538   RECURSIVE SUBROUTINE logger_fatal(cd_msg) 
    525539      IMPLICIT NONE 
     
    537551            CALL logger_close() 
    538552 
     553            WRITE(*,*) 'FATAL ERROR' 
    539554            STOP 
    540555         ENDIF 
     
    545560      ENDIF 
    546561   END SUBROUTINE logger_fatal 
    547    ! @endcode    
    548562   !------------------------------------------------------------------- 
    549563   !> @brief This subroutine cut message to get maximum of 80 character  
     
    551565   !> 
    552566   !> @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   !------------------------------------------------------------------- 
    559572   SUBROUTINE logger__write(cd_verb, cd_msg) 
    560573      IMPLICIT NONE 
     
    602615 
    603616   END SUBROUTINE logger__write 
    604    ! @endcode    
    605617END MODULE logger 
    606618 
Note: See TracChangeset for help on using the changeset viewer.