Треки
/
C#
C#
/
Вправи
/
Логи, логи, логи!
Логи, логи, логи!

Логи, логи, логи!

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

Вступ

Перелічення

Тип enum у C# представляє фіксований набір іменованих констант (перелічення). Його головна мета - забезпечити типобезпечний спосіб роботи з числовими константами, обмежуючи доступні значення заздалегідь визначеним набором. Простий enum можна визначити так:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Якщо не визначити значення явно, члени enum автоматично отримають цілі значення, що збільшуються на одиницю, а перше з них дорівнюватиме нулю. Також можна присвоїти значення явно:

enum Answer
{
    Maybe = 1,
    Yes = 3,
    No = 5
}

Вказівки

У цій вправі ми будемо обробляти рядки журналу.

Кожен рядок журналу записано як рядок тексту (англ. string) такого формату: "[<LVL>]: <MESSAGE>".

Це різні рівні логування:

  • TRC (трасування)
  • DBG (налагодження)
  • INF (інформація)
  • WRN (попередження)
  • ERR (помилка)
  • FTL (фатальна помилка)

На нас чекають три завдання.

1. Розібрати рівень логування

Визначте перелік LogLevel із шістьма елементами, що відповідають наведеним вище рівням логування.

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Fatal

Далі реалізуйте (статичний) метод LogLine.ParseLogLevel(), який розбирає рівень логування рядка журналу:

LogLine.ParseLogLevel("[INF]: File deleted")
// => LogLevel.Info

2. Підтримати невідомий рівень логування

На жаль, іноді трапляються рядки журналу з невідомим рівнем логування. Щоб коректно обробити такі рядки, додайте до переліку LogLevel елемент Unknown, який потрібно повертати, коли під час розбору рівень логування виявляється невідомим:

LogLine.ParseLogLevel("[XYZ]: Overly specific, out of context message")
// => LogLevel.Unknown

3. Перетворити рядок журналу на короткий формат

Рівень логування в рядку журналу досить громіздкий. Щоб зменшити місце на диску, потрібне для зберігання рядків журналу, було розроблено короткий формат: "[<ENCODED_LEVEL>]:<MESSAGE>".

Закодований рівень логування отримуємо простим зіставленням рівня логування з числом:

  • Unknown - 0
  • Trace - 1
  • Debug - 2
  • Info - 4
  • Warning - 5
  • Error - 6
  • Fatal - 42

Реалізуйте (статичний) метод LogLine.OutputForShortLog(), який виводить скорочений формат рядка журналу:

LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C# Exercism

Час розпочати Логи, логи, логи!?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.