로그 레벨

로그 레벨

학습 연습 문제

소개

문자열

Common Lisp에서 문자열은 문자의 벡터예요. 큰따옴표로 감싼 문자로 쓰죠. 예를 들어 "Hello World!"처럼요.

stringp 술어는 주어진 값이 문자열일 때만 참을 반환해요.

subseq 함수를 사용하면 문자열을 부분 문자열로 나눌 수 있어요. 이 함수는 문자열과 시작 인덱스를 받고, 원한다면 끝 인덱스도 받아요. 인덱스는 0부터 시작해요.

(subseq "Hello World" 1 5)   ; => "ello"
(subseq "skip to the end" 5) ; => "to the end"

두 문자열이 같은지 비교할 때는 string=을 사용해요. 대소문자를 구분하지 않으려면 string-equal을 쓰면 돼요.

(string= "macaroni" "macaroni")      ; => T
(string= "macaroni" "MACARONI")      ; => NIL
(string-equal "macaroni" "MACARONI") ; => T

문자열을 전부 대문자로, 전부 소문자로, 또는 각 단어의 첫 글자만 대문자로 바꿀 때는 string-upcase, string-downcase, string-capitalize 함수를 사용해요.

(string-upcase "not too loud")                ; => "NOT TOO LOUD"
(string-downcase "YELL IT FROM THE ROOFTOPS") ; => "yell it from the rooftops"
(string-capitalize "practical COMMON LiSP")   ; => "Practical Common Lisp"

지침

이 연습 문제에서는 Lisp 외계인 Larry를 도와 로그 문자열을 파싱하고 형식을 정리하는 코드를 작성해요. 이 로그 문자열은 여러 시스템에서 들어오는데, 담긴 메시지를 정보를 한눈에 볼 수 있는 모니터링 화면에 표시하려면 가공이 필요해요.

로그 문자열은 "[<level>]: <message>" 형태예요. <level>은 info, warn, ohno 중 하나예요.

1. 메시지 추출하기

로그 문자열을 받아 그 안에 담긴 메시지로 평가되는 함수 log-message를 정의해요.

(log-message "[ohno]: whoops!") ; => "whoops!"

2. 심각도 판단하기

로그 문자열의 레벨에 따라 심각도가 정해져요.

  • 레벨이 info인 경우 심각도는 :everything-ok에 해당해요.
  • 레벨이 warn인 경우 심각도는 :getting-worried에 해당해요.
  • 레벨이 ohno인 경우 심각도는 :run-for-cover에 해당해요.

로그 문자열을 받아 올바른 심각도로 평가되는 함수 log-severity를 정의해요.

(log-severity "[warn]: might want to get that checked") ; => :getting-worried

3. 현실의 변덕에 대처하기

안타깝게도 로그 문자열이 항상 올바른 형식으로 들어오지는 않아요. 특히 로그 레벨이 위에서 정한 것처럼 전부 소문자가 아닐 수도 있어요. log-severity를 고쳐서 이런 경우도 처리해 봐요.

(log-severity "[WaRn]: string case system failing") ; => :getting-worried

4. 로그 심각도에 따라 로그 메시지 형식 바꾸기

심각도에 따라 메시지를 서로 다른 방식으로 바꿔야 해요.

  • 심각도가 :everything-ok인 경우 메시지를 모두 소문자로 바꿔요.
  • 심각도가 :getting-worried인 경우 메시지에서 각 단어의 첫 글자를 대문자로 바꿔요.
  • 심각도가 :run-for-cover인 경우 메시지를 모두 대문자로 바꿔요.

로그 메시지를 받아 올바른 형식의 메시지로 평가되는 함수 log-format을 정의해요.

(log-format "[ohno]: whoops!") ; => WHOOPS!
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Common Lisp Exercism

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

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