트랙
/
C#
C#
/
연습 문제
/
로그, 로그, 로그!
로그, 로그, 로그!

로그, 로그, 로그!

학습 연습 문제

소개

열거형

C#의 enum 타입은 이름이 지정된 상수들의 고정된 집합(열거형)을 나타내요. 이 타입의 주된 목적은 숫자 상수를 타입에 안전한 방식으로 다루게 해 주는 것이에요. 사용할 수 있는 값을 미리 정의된 집합으로 제한해 주죠. 간단한 열거형은 다음과 같이 정의할 수 있어요:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

값을 명시적으로 지정하지 않으면, 열거형 멤버에는 자동으로 1씩 증가하는 정수 값이 할당되는데, 첫 번째 값은 0이에요. 값을 직접 지정하는 것도 가능해요:

enum Answer
{
    Maybe = 1,
    Yes = 3,
    No = 5
}

지침

이 연습 문제에서는 로그 라인을 처리해요.

각 로그 라인은 다음과 같은 형식의 문자열이에요: "[<LVL>]: <MESSAGE>".

로그 레벨에는 다음과 같은 것들이 있어요:

  • TRC (추적)
  • DBG (디버그)
  • INF (정보)
  • WRN (경고)
  • ERR (오류)
  • FTL (치명적)

세 가지 과제가 있어요.

1. 로그 레벨 파싱하기

위의 로그 레벨에 해당하는 여섯 개의 원소를 가진 LogLevel 열거형을 정의해요.

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Fatal

다음으로, 로그 라인의 로그 레벨을 파싱하는 (static) LogLine.ParseLogLevel() 메서드를 구현해요:

LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info

2. 알 수 없는 로그 레벨 지원하기

안타깝게도, 때때로 일부 로그 라인에는 알 수 없는 로그 레벨이 있어요. 이런 로그 라인을 매끄럽게 처리하려면, LogLevel 열거형에 Unknown 원소를 추가해서 알 수 없는 로그 레벨을 파싱할 때 반환되게 해요:

LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown

3. 로그 라인을 짧은 형식으로 변환하기

로그 라인의 로그 레벨은 꽤 길어요. 로그 라인을 저장하는 데 필요한 디스크 공간을 줄이기 위해 짧은 형식이 만들어졌어요: "[<ENCODED_LEVEL>]:<MESSAGE>".

인코딩된 로그 레벨은 로그 레벨을 숫자로 단순하게 매핑한 것이에요:

  • Unknown - 0
  • Trace - 1
  • Debug - 2
  • Info - 4
  • Warning - 5
  • Error - 6
  • Fatal - 42

짧아진 로그 라인 형식을 출력할 수 있는 (static) LogLine.OutputForShortLog() 메서드를 구현해요:

LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

로그, 로그, 로그! 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.