Треки
/
Elixir
Elixir
/
Вправи
/
Рівень логування
Рівень логування

Рівень логування

Навчальна вправа

Вступ

Атоми

Тип atom в Elixir представляє фіксовану константу. Значення атома - це просто його власна назва. Це дає нам типобезпечний спосіб взаємодіяти з даними. Атоми можна визначити так:

# 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. Вона має приймати код як ціле число та булеве значення (англ. Boolean) - прапорець, який вказує, чи надійшов лог від застарілого застосунку, - і повертати мітку рядка логу як атом.

Коди логів, не вказані в таблиці, мають повертати мітку unknown. Коди логів, вказані в таблиці як непідтримувані в застарілих застосунках, також мають повертати мітку unknown, якщо лог надійшов від застарілого застосунку.

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

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

2. Надішліть сповіщення

Когось потрібно повідомляти, коли трапляється щось несподіване.

Реалізуйте функцію LogLevel.alert_recipient/2, щоб визначити, кому потрібно надіслати сповіщення. Вона має приймати код як ціле число та булеве значення - прапорець, який вказує, чи надійшов лог від застарілого застосунку, - і повертати імʼя отримувача як атом.

Скористайтеся функцією 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, щоб вивчати й опановувати Elixir, а також 58 концепцій168 вправ та справжнє наставництво від людей, і все це безкоштовно.