Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic write functionality #5

Merged
merged 2 commits into from
Mar 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions example/demo.f90
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@ program demo

implicit none

type(logger_type) :: log

print*, "Put some examples in here!"
type(logger_type) :: log, log1, log2
integer :: TEST_LEVEL = 100

log = logger_type()
print*, log%id
log1 = logger_type(id = "Foo")
log2 = logger_type(id = "Bar")

call log%event("Hello", TEST_LEVEL)
call log1%event("Hello from Logger 1", TEST_LEVEL)
call log2%event("Hello from Logger 2", TEST_LEVEL)

end program demo
25 changes: 0 additions & 25 deletions src/logger.f90

This file was deleted.

103 changes: 103 additions & 0 deletions src/logger/logger_mod.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
!> Module containing an flexible logger class
module logger_mod

use, intrinsic :: iso_fortran_env, only : output_unit, error_unit

implicit none

private

type, public :: logger_type
character(len=16) :: id = "None"
integer :: log_level
integer :: output_stream
contains
procedure, public :: event
procedure :: format_info
end type

interface logger_type
procedure :: logger_constructor
end interface logger_type

contains

!> Constructor for the logger object
function logger_constructor(id) result(self)

implicit none

type(logger_type) :: self
character(len=*), optional, intent(in) :: id

self%log_level = 100
self%output_stream = output_unit

if (present(id)) self%id = trim(id)

end function logger_constructor

!> Calls a logging event
!!
!> param[in] message The message to be logged
!> param[in] level The level to be logged at
subroutine event(self, message, level)

implicit none

class(logger_type), intent(inout) :: self
character(len=*), intent(in) :: message
integer, intent(in) :: level

character(len=25) :: dt_str
character(len=32) :: info_str

dt_str = datetime_string()
info_str = self%format_info()

write ( self%output_stream, '("[", A,"] | " A, ": ", A)' ) &
trim(dt_str), trim(info_str), trim(message)

end subroutine event

!> Formats information about this logger object ready for output
!!
!> return Character array of length 32
function format_info(self) result(result_string)

implicit none

class(logger_type), intent(inout) :: self

character(len=32) :: result_string

if (trim(self%id) == "None") then
write( result_string, '(A)' ) "TEST"
else
write( result_string, '(A, " | ", A)' ) trim(self%id), "TEST"
end if

end function format_info

!> Gets formatted date/time information from iso_fortran_env
!!
!> return Character array of length 25
function datetime_string() result(result_string)

implicit none

character(len=25) :: result_string
integer :: datetime_values(8)

call date_and_time(values = datetime_values)

write( result_string, &
'(I4,A1,I2.2,A1,I2.2,A1,I2.2,A1,I2.2,A1,I2.2,A1,I3.3)') &
datetime_values(1), "-", datetime_values(2), "-", &
datetime_values(3), " ", datetime_values(5), ":", &
datetime_values(6), ":", datetime_values(7), ".", &
datetime_values(8)

end function datetime_string

end module logger_mod