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