Níveis de log

Níveis de log

Exercício de aprendizagem

Introdução

Strings

Em Common Lisp, strings são vetores de caracteres. Elas são escritas como caracteres entre aspas duplas (por exemplo "Hello World!").

O predicado stringp retornará verdadeiro apenas se o valor fornecido for uma string.

Strings podem ser divididas em substrings com a função subseq, que recebe a string, um índice inicial e, opcionalmente, um índice final. A indexação começa em zero.

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

Strings podem ser comparadas para verificar igualdade com string=. Se maiúsculas e minúsculas não importarem, use string-equal.

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

Operações como colocar strings em maiúsculas, em minúsculas e capitalizá-las podem ser feitas com string-upcase, string-downcase e 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"

Instruções

Neste exercício, você vai escrever um pouco de código para ajudar o Larry, o Alien Lisp, a processar e formatar strings de log. Essas strings de log chegam de vários sistemas e precisam ser processadas para que suas mensagens possam ser exibidas em um painel de monitoramento informativo.

As strings de log têm o formato "[<level>]: <message>". O level será um dos seguintes valores: info, warn ou ohno.

1. Extraia a mensagem

Defina uma função log-message que recebe uma string de log e retorna a mensagem contida nela.

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

2. Determine a gravidade

O level da string de log determina a sua gravidade.

  • um level info significa uma gravidade :everything-ok
  • um level warn significa uma gravidade :getting-worried
  • um level ohno significa uma gravidade :run-for-cover

Defina uma função log-severity que recebe uma string de log e retorna a gravidade correta.

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

3. Lidando com os caprichos da realidade

Infelizmente, às vezes as strings de log não estão sempre formatadas corretamente. Mais especificamente, o log level pode não estar todo em letras minúsculas como especificado acima. Modifique log-severity para lidar com isso.

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

4. Reformatando a mensagem do log de acordo com a gravidade

Dependendo da gravidade, a mensagem deve ser modificada de maneiras diferentes:

  • uma gravidade :everything-ok deve ter sua mensagem alterada para tudo em letras minúsculas.
  • uma gravidade :getting-worried deve ter sua mensagem alterada para ter cada palavra com a primeira letra maiúscula.
  • uma gravidade :run-for-cover deve ter sua mensagem alterada para tudo em letras maiúsculas.

Defina uma função log-format que recebe uma mensagem de log e retorna uma mensagem formatada corretamente.

(log-format "[ohno]: whoops!") ; => WHOOPS!
Editar via GitHub O link abre em uma nova janela ou aba
Common Lisp Exercism

Tudo pronto para começar Níveis de log?

Crie sua conta no Exercism para aprender e dominar Common Lisp com 27 conceitos92 exercícios e mentoria humana de verdade, tudo de graça.