トラック
/
C#
C#
/
演習
/
ログ、ログ、ログ!
ログ、ログ、ログ!

ログ、ログ、ログ!

学習演習

はじめに

列挙型

C#のenum型は、名前付き定数の固定セット(列挙型)を表します。その主な目的は、数値定数を型安全に扱えるようにし、使用できる値をあらかじめ定義されたセットに限定することです。単純な列挙型は次のように定義できます:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

明示的に定義しない場合、列挙型のメンバーには自動的に1ずつ増える整数値が割り当てられ、最初の値は0になります。値を明示的に割り当てることもできます:

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

説明

この演習では、ログ行を処理します。

各ログ行は、"[<LVL>]: <MESSAGE>"という形式の文字列です。

ログレベルには、次の種類があります:

  • TRC(トレース)
  • DBG(デバッグ)
  • INF(情報)
  • WRN(警告)
  • ERR(エラー)
  • FTL(致命的)

取り組むタスクは3つあります。

1. ログレベルを解析する

上のログレベルに対応する6つの要素を持つLogLevel列挙型を定義します。

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

次に、(static)な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

短縮されたログ行の形式を出力する(static)LogLine.OutputForShortLog()メソッドを実装します:

LogLine.OutputForShortLog(LogLevel.Error, "Stack overflow")
// => "6:Stack overflow"
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

ログ、ログ、ログ!を始める準備はできましたか?

Exercismに登録すれば、62個のコンセプト178個の演習、そして本物の人間によるメンタリングとともに、C#を学んでマスターできます。すべて無料です。