AzLearn

تمرين إعادة البناء

Log Parser

أعد كتابة برنامج Go يلخص مستويات رسائل السجل.

go ~18 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
package main

import (
	"bufio"
	"fmt"
	"sort"
	"strings"
)

func parseLevels(logText string) map[string]int {
	counts := map[string]int{"INFO": 0, "WARN": 0, "ERROR": 0}
	scanner := bufio.NewScanner(strings.NewReader(logText))

	for scanner.Scan() {
		fields := strings.Fields(scanner.Text())
		if len(fields) < 2 {
			continue
		}
		level := strings.Trim(fields[1], "[]")
		if _, ok := counts[level]; ok {
			counts[level]++
		}
	}

	return counts
}

func main() {
	logText := `09:00 [INFO] service started
09:01 [WARN] retrying slow request
09:02 [ERROR] payment failed
09:03 [INFO] service recovered`

	counts := parseLevels(logText)
	levels := make([]string, 0, len(counts))
	for level := range counts {
		levels = append(levels, level)
	}
	sort.Strings(levels)

	for _, level := range levels {
		fmt.Printf("%-5s %d\n", level, counts[level])
	}
}
اكتب هنا