スライスによるログフィルタリングのチャレンジ

GolangBeginner
オンラインで実践に進む

はじめに

このチャレンジでは、スライス(Slice)を活用して、関連するログメッセージを処理・抽出するログフィルタリング機能を開発します。サイバーセキュリティの目まぐるしい変化の中で、潜在的なセキュリティ脅威を特定するためには、効率的なログフィルタリングが不可欠です。

ここでの目標は、指定されたキーワードに基づいてログメッセージをフィルタリングする filterLogs 関数を実装することです。この関数は、大文字と小文字を区別し、空のスライスや空のキーワードも適切に処理する必要があります。また、タイムスタンプなどのメタデータを除外し、メッセージの内容のみを返すように実装してください。

スライスログフィルタ関数の実装

スライスベースのログフィルタリング機能を開発し、特定のキーワードに一致するログメッセージの内容(タイムスタンプを除く)のみを抽出してください。

タスク

  • ログエントリのスライスとキーワードを受け取る filterLogs 関数を実装します。
  • 指定されたキーワードを含むログエントリから、メッセージ内容のみを抽出した新しいスライスを返します。
  • 大文字と小文字を厳密に区別するようにしてください。
  • ログエントリのフィルタリングと処理には、Go のスライス操作を使用してください。
  • 空のスライスや空のキーワードが渡された場合でも、エラーにならず適切に処理できるようにします。

要件

  • 実装は ~/project/logfilter.go ファイルに作成してください。
  • 元のスライスを変更せず、処理結果を含む新しいスライスを返すようにしてください。
  • フィルタリングに外部ライブラリを使用しないでください。
  • キーワードの後のメッセージ内容のみを抽出して返してください(例:"2023-06-15 ERROR: Disk is almost full" から "Disk is almost full" のみを抽出)。
  • ログの処理には文字列操作関数を使用してください。

以下のログエントリがあるとします:

logs := []string{
    "2023-06-15 ERROR: Security breach detected",
    "2023-06-15 INFO: System startup completed",
    "2023-06-15 WARN: Unauthorized access attempt",
    "2023-06-15 ERROR: Disk is almost full",
    "2023-06-15 INFO: User login",
    "2023-06-15 WARN: System temperature too high",
}

実行コマンド:

go run logfilter.go

出力結果:

Error Logs: [Security breach detected Disk is almost full]
Warning Logs: [Unauthorized access attempt System temperature too high]
Info Logs: [System startup completed User login]

ヒント

  1. ログの反復処理: for ループを使用して、各ログエントリを順番にチェックします。
  2. キーワードの検索: ログ内で "<KEYWORD>: " というパターンを探します。
  3. メッセージの抽出: スライス操作(Slicing)を使用して、キーワードと ": " の後の部分を取得します。
  4. 空の入力への対応: ログまたはキーワードが空の場合は、空のスライスを返します。
  5. 結果の追加: append を使用して、一致したメッセージを新しいスライスに追加します。
✨ 解答を確認して練習

まとめ

このチャレンジでは、指定されたキーワードに基づいて、ログ文字列のスライスから関連するメッセージ(メタデータを除く)を効率的に処理・抽出する filterLogs 関数を実装しました。この関数は、大文字と小文字を区別し、空の入力に対しても堅牢に動作します。Go のスライス操作と文字列操作を駆使して、データを適切にフィルタリングし、加工して返す能力を習得しました。