トラック
/
C#
C#
/
演習
/
ログ分析
ログ分析

ログ分析

学習演習

はじめに

拡張メソッド

拡張メソッドを使うと、新しい派生型を作成したり、再コンパイルしたり、元の型をその他の方法で変更したりすることなく、既存の型にメソッドを追加できます。静的メソッドとして定義されますが、呼び出すときはインスタンスメソッドの構文を使います。最初の仮引数の前にはthis修飾子を付け、そのメソッドが操作する型を指定します。また、拡張メソッドは名前空間レベルでスコープに取り込まれます。

public static int WordCount(this string str)
{
    return str.Split().Length;
}

"Hello World".WordCount();
// => 2

説明

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

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

ログレベルは3種類あります。

  • INFO
  • WARNING
  • ERROR

タスクはいくつかあり、それぞれが1つのログ行を受け取って、それに対して何かを行うものです。

1. 特定の部分文字列より後ろの文字列を取得できるようにする

先月のログを見てみると、テストメッセージがいつも特定の部分文字列の後ろにあることがわかります。近いうちにテストメッセージを取り出す必要が出てきそうなので、そのためのヘルパーメソッドを作ることにします。

実装するのは、何らかの文字列の区切り文字を受け取り、その区切り文字より後ろの部分文字列を返す、(static)LogAnalysis.SubstringAfter()拡張メソッドです。

var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."

2. 2つの部分文字列の間にある文字列を取得できるようにする

さらに詳しく調べてみると、ログレベルはいつも角括弧([と])の間にあることがわかります。こちらも近いうちにログレベルを取り出す必要が出てきそうなので、そのためのヘルパーメソッドをもう1つ作ることにします。

実装するのは、2つの文字列の区切り文字を受け取り、その2つの区切り文字の間にある部分文字列を返す、(static)LogAnalysis.SubstringBetween()拡張メソッドです。

var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"

3. ログからメッセージを解析する

実装するのは、ログに含まれるメッセージを返す、(static)LogAnalysis.Message()拡張メソッドです。

var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."

4. ログからログレベルを解析する

実装するのは、ログのログレベルを返す、(static)LogAnalysis.LogLevel()拡張メソッドです。

var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

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

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