學習軌道
/
Elixir
Elixir
/
練習
/
日誌等級
日誌等級

日誌等級

學習練習

簡介

原子

Elixir 的atom型別代表一個固定的常數。原子的值就是它本身的名稱。這讓我們能以型別安全的方式與資料互動。原子可以像這樣定義:

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

_原子_在內部是由查表中的整數表示,這些整數會自動設定。我們無法改變這個內部的值。

Cond

我們經常會想寫出能根據條件分支的程式碼。在 Elixir 中雖然有很多種做法,但最簡單的方法之一就是使用cond/1。

最簡單的情況下,cond可以有一或多個分支,並且會採用第一個評估為true的路徑:

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

如果沒有任何路徑評估為true,執行環境就會引發錯誤。

說明

你正在運作一個由幾個應用程式組成的系統,這些應用程式會產生許多日誌。你想寫一個小程式,把這些日誌彙整起來,並依照嚴重程度為它們加上標籤。系統中所有應用程式都使用相同的日誌代碼,但有些舊版應用程式不支援全部代碼。

日誌代碼 日誌標籤 舊版應用程式支援嗎?
0 trace 否
1 debug 是
2 info 是
3 warning 是
4 error 是
5 fatal 否
其他/不支援 unknown -

1. 判斷日誌標籤

實作LogLevel.to_label/2函式。它應該接受一個整數代碼,以及一個指出日誌是否來自舊版應用程式的布林旗標,並以 atom 的形式回傳該筆日誌的標籤。

表中未指定的日誌代碼應回傳 unknown 標籤。表中標示為舊版應用程式不支援的日誌代碼,如果日誌來自舊版應用程式,也應回傳 unknown 標籤。

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

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

2. 傳送警示

當意料之外的事情發生時,總得有人收到通知。

實作LogLevel.alert_recipient/2函式,判斷警示需要傳送給誰。這個函式應該接受一個整數代碼,以及一個指出日誌是否來自舊版應用程式的布林旗標,並以 atom 的形式回傳收件者的名稱。

請使用上一個任務的LogLevel.to_label/2函式。如果日誌標籤是 error 或 fatal,就把警示傳送給 ops 團隊。如果你收到來自舊版系統、標籤為 unknown 的日誌,就把警示傳送給 dev1 團隊;其他標籤為 unknown 的日誌則應傳送給 dev2 團隊。其他所有日誌標籤都可以安全地忽略,只要回傳 false 即可。

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

LogLevel.alert_recipient(0, false)
# => false
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 日誌等級 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。