117 INTEGER(kind=c_int),
PARAMETER :: L4F_FATAL = 000
118 INTEGER(kind=c_int),
PARAMETER :: L4F_ALERT = 100
119 INTEGER(kind=c_int),
PARAMETER :: L4F_CRIT = 200
120 INTEGER(kind=c_int),
PARAMETER :: L4F_ERROR = 300
121 INTEGER(kind=c_int),
PARAMETER :: L4F_WARN = 400
122 INTEGER(kind=c_int),
PARAMETER :: L4F_NOTICE = 500
123 INTEGER(kind=c_int),
PARAMETER :: L4F_INFO = 600
124 INTEGER(kind=c_int),
PARAMETER :: L4F_DEBUG = 700
125 INTEGER(kind=c_int),
PARAMETER :: L4F_TRACE = 800
126 INTEGER(kind=c_int),
PARAMETER :: L4F_NOTSET = 900
127 INTEGER(kind=c_int),
PARAMETER :: L4F_UNKNOWN = 1000
132 INTEGER(kind=c_int),
PUBLIC :: l4f_priority=l4f_notice
139 TYPE,BIND(C) :: l4f_handle
141 TYPE(c_ptr) :: ptr = c_null_ptr
145 TYPE(l4f_handle),
SAVE :: l4f_global_default
147 #undef ARRAYOF_ORIGEQ 148 #undef ARRAYOF_ORIGTYPE 150 #define ARRAYOF_ORIGTYPE TYPE(l4f_handle) 151 #define ARRAYOF_TYPE arrayof_l4f_handle 152 #include "arrayof_pre_nodoc.F90" 154 TYPE(arrayof_l4f_handle) :: l4f_global_ptr
158 FUNCTION l4f_init() bind(C,name='log4c_init')
160 INTEGER(kind=c_int) :: l4f_init
166 FUNCTION l4f_category_get_c(a_name) bind(C,name='log4c_category_get')
168 CHARACTER(kind=c_char),
INTENT(in) :: a_name(*)
169 TYPE(l4f_handle) :: l4f_category_get_c
170 END FUNCTION l4f_category_get_c
178 SUBROUTINE l4f_category_delete_c(a_category) bind(C,name='log4c_category_delete')
180 TYPE(l4f_handle),
VALUE :: a_category
181 END SUBROUTINE l4f_category_delete_c
186 INTERFACE l4f_category_delete
187 MODULE PROCEDURE l4f_category_delete_legacy, l4f_category_delete_f
192 SUBROUTINE l4f_category_log_c(a_category, a_priority, a_format) bind(C,name='log4c_category_log_c')
194 TYPE(l4f_handle),
VALUE :: a_category
195 INTEGER(kind=c_int),
VALUE :: a_priority
197 CHARACTER(kind=c_char),
INTENT(in) :: a_format(*)
199 END SUBROUTINE l4f_category_log_c
205 MODULE PROCEDURE l4f_category_log_f, l4f_category_log_legacy
210 MODULE PROCEDURE l4f_category_exist_f, l4f_category_exist_legacy
215 FUNCTION l4f_fini() bind(C,name='log4c_fini')
217 INTEGER(kind=c_int) :: l4f_fini
230 CHARACTER(len=510),
PRIVATE:: dummy_a_name
241 PUBLIC l4f_fatal, l4f_alert, l4f_crit, l4f_error, l4f_warn, l4f_notice, &
242 l4f_info, l4f_debug, l4f_trace, l4f_notset, l4f_unknown
253 SUBROUTINE l4f_launcher(a_name, a_name_force, a_name_append)
254 CHARACTER(len=*),
INTENT(out) :: a_name
255 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: a_name_force
256 CHARACTER(len=*),
INTENT(in),
OPTIONAL :: a_name_append
259 CHARACTER(len=255) :: LOG4_APPLICATION_NAME,LOG4_APPLICATION_ID,arg
260 CHARACTER(len=255),
SAVE :: a_name_save=
"" 262 IF (
PRESENT(a_name_force))
THEN 264 ELSE IF (a_name_save /=
"")
THEN 268 CALL date_and_time(values=tarray)
270 CALL getenv(
"LOG4_APPLICATION_NAME", log4_application_name)
271 CALL getenv(
"LOG4_APPLICATION_ID", log4_application_id)
273 IF (log4_application_name ==
"" .AND. log4_application_id ==
"")
THEN 274 WRITE(a_name,
"(a,a,8i5,a)")trim(arg),
"[",tarray,
"]" 276 a_name = trim(log4_application_name)//
"["//trim(log4_application_id)//
"]" 283 IF (
PRESENT(a_name_append))
THEN 284 a_name=trim(a_name)//
"."//trim(a_name_append)
287 END SUBROUTINE l4f_launcher
289 #ifndef HAVE_LIBLOG4C 294 CHARACTER(len=10) :: priority
297 CALL getenv(
"LOG4C_PRIORITY",priority)
298 IF (priority==
"")
THEN 299 l4f_priority = l4f_notice
301 READ(priority,*,iostat=iostat)l4f_priority
304 IF (iostat /= 0)
THEN 305 l4f_priority = l4f_notice
314 FUNCTION l4f_category_get(a_name)
RESULT(handle)
315 CHARACTER(len=*),
INTENT(in) :: a_name
320 dummy_a_name = a_name
322 END FUNCTION l4f_category_get
326 SUBROUTINE l4f_category_delete(a_category)
332 END SUBROUTINE l4f_category_delete
337 TYPE(l4f_handle),
INTENT(in) :: a_category
338 INTEGER,
INTENT(in):: a_priority
339 CHARACTER(len=*),
INTENT(in):: a_format
341 IF (a_category%ptr == 1 .AND. a_priority <= l4f_priority)
THEN 342 WRITE(*,*)
"[dummy] ",l4f_msg(a_priority),trim(dummy_a_name),
" - ",trim(a_format)
349 SUBROUTINE l4f_log(a_priority,a_format)
350 INTEGER,
INTENT(in):: a_priority
351 CHARACTER(len=*),
INTENT(in):: a_format
353 IF (a_priority <= l4f_priority)
THEN 354 WRITE(*,*)
"[_default] ",l4f_msg(a_priority),trim(dummy_a_name),
" - ",trim(a_format)
357 END SUBROUTINE l4f_log
362 TYPE(l4f_handle),
INTENT(in) :: a_category
377 CHARACTER(len=12) FUNCTION l4f_msg(a_priority)
378 INTEGER,
INTENT(in):: a_priority
380 write(l4f_msg,*)a_priority
382 if (a_priority == l4f_fatal) l4f_msg=
"FATAL" 383 if (a_priority == l4f_alert) l4f_msg=
"ALERT" 384 if (a_priority == l4f_crit) l4f_msg=
"CRIT" 385 if (a_priority == l4f_error) l4f_msg=
"ERROR" 386 if (a_priority == l4f_warn) l4f_msg=
"WARN" 387 if (a_priority == l4f_notice) l4f_msg=
"NOTICE" 388 if (a_priority == l4f_info) l4f_msg=
"INFO" 389 if (a_priority == l4f_debug) l4f_msg=
"DEBUG" 390 if (a_priority == l4f_trace) l4f_msg=
"TRACE" 391 if (a_priority == l4f_notset) l4f_msg=
"NOTSET" 392 if (a_priority == l4f_unknown) l4f_msg=
"UNKNOWN" 398 #include "arrayof_post_nodoc.F90" 403 FUNCTION l4f_category_get(a_name)
RESULT(handle)
404 CHARACTER(kind=c_char,len=*),
INTENT(in) :: a_name
407 handle = append(l4f_global_ptr, l4f_category_get_c(trim(a_name)//char(0)))
409 END FUNCTION l4f_category_get
415 FUNCTION l4f_category_get_handle(a_name)
RESULT(handle)
416 CHARACTER(kind=c_char,len=*),
INTENT(in) :: a_name
417 TYPE(l4f_handle) :: handle
419 handle = l4f_category_get_c(trim(a_name)//char(0))
421 END FUNCTION l4f_category_get_handle
425 SUBROUTINE l4f_category_delete_legacy(a_category)
426 INTEGER,
INTENT(in) :: a_category
428 IF (a_category <= 0 .OR. a_category > l4f_global_ptr%arraysize)
RETURN 429 CALL remove(l4f_global_ptr, pos=a_category)
431 END SUBROUTINE l4f_category_delete_legacy
435 SUBROUTINE l4f_category_delete_f(a_category)
436 TYPE(l4f_handle),
INTENT(inout) :: a_category
440 a_category%ptr = c_null_ptr
442 END SUBROUTINE l4f_category_delete_f
447 SUBROUTINE l4f_category_log_f(a_category, a_priority, a_format)
448 TYPE(l4f_handle),
INTENT(in) :: a_category
449 INTEGER(kind=c_int),
INTENT(in) :: a_priority
450 CHARACTER(len=*),
INTENT(in) :: a_format
452 CALL l4f_category_log_c(a_category, a_priority, trim(a_format)//char(0))
454 END SUBROUTINE l4f_category_log_f
460 SUBROUTINE l4f_category_log_legacy(a_category, a_priority, a_format)
461 INTEGER(kind=c_int),
INTENT(in) :: a_category
462 INTEGER(kind=c_int),
INTENT(in) :: a_priority
463 CHARACTER(len=*),
INTENT(in) :: a_format
465 CALL l4f_category_log_c(l4f_global_ptr%array(a_category), l4f_warn, &
466 'You are using the legacy log4fortran interface!'//char(0))
467 CALL l4f_category_log_c(l4f_global_ptr%array(a_category), l4f_warn, &
468 'Please, upgrade your code by defining category as `TYPE(l4f_handle)`'//char(0))
469 CALL l4f_category_log_c(l4f_global_ptr%array(a_category), l4f_warn, &
470 'and replacing `l4f_category_get` with `l4f_category_get_handle`'//char(0))
471 CALL l4f_category_log_c(l4f_global_ptr%array(a_category), a_priority, trim(a_format)//char(0))
473 END SUBROUTINE l4f_category_log_legacy
478 SUBROUTINE l4f_log(a_priority, a_format)
479 INTEGER(kind=c_int),
INTENT(in) :: a_priority
480 CHARACTER(len=*),
INTENT(in) :: a_format
486 l4f_global_default = l4f_category_get_handle(
'_default')
490 END SUBROUTINE l4f_log
495 FUNCTION l4f_category_exist_f(a_category)
RESULT(exist)
496 TYPE(l4f_handle),
INTENT(in) :: a_category
499 exist = c_associated(a_category%ptr)
501 END FUNCTION l4f_category_exist_f
507 FUNCTION l4f_category_exist_legacy(a_category)
RESULT(exist)
508 INTEGER,
INTENT(in):: a_category
511 IF (a_category <= 0 .OR. a_category > l4f_global_ptr%arraysize)
THEN 517 END FUNCTION l4f_category_exist_legacy
Return true if the corresponding category handle exists.
Global log4fortran destructor.
classe per la gestione del logging
Global log4fortran constructor.
Emit log message for a category with specific priority.