切片日志过滤器挑战

GolangBeginner
立即练习

介绍

在本次挑战中,你将开发一个基于切片的日志过滤函数,用于处理并提取相关的日志消息。在节奏极快的网络安全领域,高效的日志过滤对于识别潜在的安全威胁至关重要。你的目标是实现 filterLogs 函数,根据给定的关键字过滤日志消息,同时确保该函数区分大小写,并能妥善处理空切片和空关键字的情况。此外,该函数应仅返回消息内容,不包括时间戳或其他元数据。

这是一个「挑战」项目,它与「引导实验」不同,你需要尝试独立完成挑战任务,而不是按照实验步骤一步步学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个初学者级别的挑战,通过率为 96%。它在学习者中获得了 88% 的好评率。

实现切片日志过滤函数

开发一个基于切片的日志过滤函数,针对给定的关键字进行处理,并仅提取日志消息内容(不含时间戳)。

任务

  • 实现 filterLogs 函数,该函数接收一个日志条目切片和一个关键字。
  • 函数应返回一个新切片,其中仅包含包含指定关键字的日志条目的消息内容。
  • 确保函数区分大小写。
  • 使用 Go 语言的切片操作来过滤和处理日志条目。
  • 妥善处理空切片和空关键字。

要求

  • ~/project/logfilter.go 文件中完成代码实现。
  • 确保函数不会修改原始切片,并返回包含处理结果的新切片。
  • 不要使用任何外部库进行过滤。
  • 仅提取并返回关键字之后的消息内容(例如,返回 "Disk is almost full" 而不是 "2023-06-15 ERROR: 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. 提取消息:使用切片操作获取关键字和 ": " 之后的部分。
  4. 处理空输入:如果日志或关键字为空,则返回一个空切片。
  5. 追加结果:使用 append 将匹配的消息添加到新切片中。
✨ 查看解决方案并练习

总结

总而言之,本次挑战要求你实现一个 filterLogs 函数,该函数能够根据给定的关键字,从日志字符串切片中高效地处理并提取相关的日志消息(不含元数据)。该函数应区分大小写,妥善处理空切片和空关键字,并展示出熟练运用 Go 语言切片和字符串处理操作来过滤并返回处理后日志消息的能力。