parse_log_level Subroutine

private subroutine parse_log_level(level_str, level)

Parse log level from string.

@param[in] level_str Log level as string (NONE, ERROR, WARN, INFO, DEBUG, TRACE) @param[out] level Parsed log level constant

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: level_str
integer, intent(out) :: level

Source Code

    subroutine parse_log_level(level_str, level)
        character(len=*), intent(in) :: level_str
        integer, intent(out) :: level
        character(len=256) :: upper_str
        integer :: i

        ! Convert to uppercase
        upper_str = level_str
        do i = 1, len_trim(upper_str)
            if (upper_str(i:i) >= 'a' .and. upper_str(i:i) <= 'z') then
                upper_str(i:i) = char(ichar(upper_str(i:i)) - 32)
            end if
        end do

        select case (trim(upper_str))
        case ('NONE', '0')
            level = S3_LOG_LEVEL_NONE
        case ('ERROR', '1')
            level = S3_LOG_LEVEL_ERROR
        case ('WARN', 'WARNING', '2')
            level = S3_LOG_LEVEL_WARN
        case ('INFO', '3')
            level = S3_LOG_LEVEL_INFO
        case ('DEBUG', '4')
            level = S3_LOG_LEVEL_DEBUG
        case ('TRACE', '5')
            level = S3_LOG_LEVEL_TRACE
        case default
            level = S3_LOG_LEVEL_ERROR  ! Default to ERROR
            write(*, '(A,A,A)') '[S3 WARN] Unknown log level "', trim(level_str), &
                '", defaulting to ERROR'
        end select
    end subroutine parse_log_level