Tracks
/
Elixir
Elixir
/
Übungen
/
Log-Level
Log-Level

Log-Level

Lernübung

Einführung

Atome

Der Typ atom in Elixir steht für eine feste Konstante. Der Wert eines Atoms ist einfach sein eigener Name. Das gibt uns eine typsichere Möglichkeit, mit Daten zu arbeiten. Atome kannst du so definieren:

# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom

Atome werden intern durch eine Ganzzahl in einer Nachschlagetabelle dargestellt, die automatisch festgelegt wird. Es ist nicht möglich, diesen internen Wert zu ändern.

Cond

Oft wollen wir Code schreiben, der abhängig von einer Bedingung verzweigt. In Elixir gibt es dafür viele Möglichkeiten, aber eine der einfachsten ist cond/1.

In seiner einfachsten Form folgt cond dem ersten Pfad, der zu true ausgewertet wird, mit einem oder mehreren Zweigen:

cond do
  x > 10 -> :this_might_be_the_way
  y < 7 -> :or_that_might_be_the_way
  true -> :this_is_the_default_way
end

Wenn kein Pfad zu true ausgewertet wird, wirft die Laufzeitumgebung einen Fehler.

Anleitung

Du betreibst ein System, das aus ein paar Anwendungen besteht, die viele Logs erzeugen. Du möchtest ein kleines Programm schreiben, das diese Logs zusammenfasst und ihnen Labels entsprechend ihrem Schweregrad zuweist. Alle Anwendungen in deinem System verwenden dieselben Log-Codes, aber einige der Legacy-Anwendungen unterstützen nicht alle Codes.

Log-Code Log-Label In Legacy-Apps unterstützt?
0 trace nein
1 debug ja
2 info ja
3 warning ja
4 error ja
5 fatal nein
andere / nicht unterstützt unknown -

1. Bestimme das Log-Label

Implementiere die Funktion LogLevel.to_label/2. Sie sollte eine Ganzzahl als Code und einen booleschen Wert entgegennehmen, der dir sagt, ob der Log von einer Legacy-App stammt, und das Label einer Logzeile als Atom zurückgeben.

Log-Codes, die nicht in der Tabelle angegeben sind, sollten ein unknown-Label zurückgeben. Log-Codes, die in der Tabelle als nicht in Legacy-Apps unterstützt angegeben sind, sollten ebenfalls ein unknown-Label zurückgeben, wenn der Log von einer Legacy-App stammt.

LogLevel.to_label(0, false)
# => :trace

LogLevel.to_label(0, true)
# => :unknown

2. Sende einen Alarm

Jemand muss benachrichtigt werden, wenn unerwartete Dinge passieren.

Implementiere die Funktion LogLevel.alert_recipient/2, um zu bestimmen, an wen der Alarm gesendet werden muss. Die Funktion sollte eine Ganzzahl als Code und einen booleschen Wert entgegennehmen, der dir sagt, ob der Log von einer Legacy-App stammt, und den Namen des Empfängers als Atom zurückgeben.

Verwende die Funktion LogLevel.to_label/2 aus der vorherigen Aufgabe. Wenn das Log-Label error oder fatal ist, sende den Alarm an das ops-Team. Wenn du einen Log mit einem unknown-Label von einem Legacy-System erhältst, sende den Alarm an das dev1-Team. Andere unknown-Labels sollten an das dev2-Team gesendet werden. Alle anderen Log-Labels kannst du getrost ignorieren, indem du false zurückgibst.

LogLevel.alert_recipient(-1, true)
# => :dev1

LogLevel.alert_recipient(0, false)
# => false
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Log-Level zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.